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?

Meysam
sumber

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
Saeedn
sumber
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.

ixtmixilix
sumber
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 .

harish.venkat
sumber
@ 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