Salin dan tempel file / direktori dari baris perintah


17

Alih-alih menggunakan perintah berikut:

cp {file sumber} {dest file}

Saya ingin dapat menyalin file ke clipboard, dan menempelkannya di tempat lain, di direktori lain. sesuatu seperti ini:

/ usr / local / dir1 # cp {file sumber}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # paste

Apa itu mungkin?

Jawaban:


17

Saya pikir Anda harus melakukan sesuatu seperti aplikasi GUI. Gagasan saya untuk melakukan ini adalah menulis dua fungsi untuk Salin dan Tempel, tempat Salin menulis jalur file yang akan disalin ke file sementara dan Tempel membaca jalur tersebut dan cukup memanggil cpperintah. Implementasi saya (untuk dimasukkan ke dalam .bashrcfile) seperti di bawah ini:

function Copy {
    touch ~/.clipfiles
    for i in "$@"; do
      if [[ $i != /* ]]; then i=$PWD/$i; fi
      i=${i//\\/\\\\}; i=${i//$'\n'/$'\\\n'}
      printf '%s\n' "$i"
    done >> ~/.clipfiles
}

function Paste {
    while IFS= read src; do
      cp -Rdp "$src" .
    done < ~/.clipfiles
    rm ~/.clipfiles
}

Skrip yang lebih baik dapat ditulis untuk menerapkan ide ini, saya menguji ide saya sendiri dan ini bekerja sangat baik untuk file dan folder (saya tidak tahu bagaimana xclipbisa bekerja untuk menyalin folder !!)


Sebagai contoh:

/usr/local/dir1# Copy a.txt *.cpp
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy *.h *.cpp b.txt subdir1
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy a.txt b.txt 
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Copy c.txt d.txt
/usr/local/dir2# cd /usr/local/dir3
/usr/local/dir3# Paste

1
Ini bekerja seperti pesona!
Meysam

2
Aku suka ide ini. Dan dengan sedikit modifikasi, Anda bahkan bisa mengimplementasikan fungsi "cut" juga.
Pablo Venturino

@Gilles Bisa tolong jelaskan mengapa Anda diganti echodengan printf?
Meysam

@ Meysam Untuk bekerja di bawah shopt -s xpg_echo.
Gilles 'SO- stop being evil'

1
@ Meysam printfportabel dan aman sementara echotidak. The Wooledge wiki menyebutkan ini secara singkat.
jw013

10

saya sarankan xclip. Saya menggunakannya sepanjang waktu untuk ini. tetapi Anda tidak perlu skrip. cukup gunakan fungsi.

saya melihat tidak perlu menggunakan skrip ini, khususnya, karena jika Anda melakukan apa yang saya pikir Anda lakukan, Anda akan menemukan skrip yang telah disebutkan (di blog tidbits linux bermanfaat) menjengkelkan karena mereka meminta Anda untuk input sedapat mungkin , hanya untuk menggunakannya, bertentangan dengan filosofi unix.

saya sarankan hanya menulis beberapa fungsi ke .bashrc:

clip2file () {
  xclip -out -selection clipboard >> $@
  echo -e "\n" >> $@
}

file2clip () {
  cat $@ | xclip -selection clipboard
}

untuk menggunakannya, Anda perlu apt-get install xclip(Debian, Ubuntu, Linux Mint, dll.) atau zypper in xclip(openSUSE, sistem berbasis .rpm lainnya) atau sejenisnya. program harus tersedia pada sistem apa pun yang Anda gunakan.


3

Anda dapat menggunakan xclipperintah untuk ini. Anda dapat mengunduh skrip bash dari tautan ini dan memasukkan alias untuk bash cp2clipdan bash clippasteke dalam .bashrcfile Anda .


@ apa maksudmu dengan alias?
ixtmixilix

saya bermaksud menyimpan file di direktori home Anda dan memasukkan dua alias di .bashrc alias cp2clip = 'bash / home / <username> /cp2clip.sh' dan clippaste = 'bash / home / <username> /clippaste.sh' jadi Anda dapat menggunakannya di mana saja. Untuk membaca lebih lanjut tentang alias, Anda dapat melihat man aliasatau linfo.org/alias.html
harish.venkat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.