Copia e incolla un file / directory dalla riga di comando


17

Invece di utilizzare il seguente comando:

cp {file sorgente} {file dest}

Voglio essere in grado di copiare un file negli Appunti e incollarlo da qualche altra parte, in un'altra directory. qualcosa come questo:

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

È possibile?

Risposte:


17

Penso che dovresti fare qualcosa come fanno le applicazioni della GUI. La mia idea per farlo è quella di scrivere due funzioni per Copia e Incolla, dove Copia scrive il percorso dei file da copiare in un file temporaneo e Incolla legge quei percorsi e chiama semplicemente il cpcomando. La mia implementazione (da mettere in .bashrcarchivio) è come di seguito:

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
}

Potrebbero essere scritti script migliori per implementare questa idea, ho testato il mio e funziona molto bene per file e cartelle (non so come xclippotrebbe funzionare per copiare le cartelle !!)


Per esempio:

/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
Funziona come un incantesimo!
Meysam,

2
Mi piace questa idea. E con piccole modifiche, potresti anche implementare anche una funzione di "taglio".
Pablo Venturino,

@Gilles Potrebbe spiegare il motivo per cui è stato sostituito echocon printf?
Meysam,

@Meysam Per lavorare anche sotto shopt -s xpg_echo.
Gilles 'SO- smetti di essere malvagio' il

1
@Meysam printfè portatile e sicuro mentre echonon lo è. La wiki di Wooledge lo menziona brevemente.
jw013,

10

suggerisco xclip. lo uso sempre per questo. ma non hai bisogno di una sceneggiatura. basta usare le funzioni.

non vedo la necessità di usare questi script, in particolare, perché se stai facendo quello che penso tu stia facendo, troverai gli script già menzionati (sul utile blog su Linux tidbits) fastidiosi perché ti chiedono input ovunque possibile , solo usarli, contrariamente alla filosofia unix.

suggerisco solo di scrivere alcune funzioni nel tuo .bashrc:

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

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

per usarli, è necessario apt-get install xclip(Debian, Ubuntu, Linux Mint, ecc.) o zypper in xclip(openSUSE, altri sistemi basati su .rpm) o alcuni equivalenti. il programma dovrebbe essere disponibile su qualsiasi sistema in uso.


3

È possibile utilizzare il xclipcomando per questo. Puoi scaricare script bash da questo link e inserire alias per bash cp2clipe bash clippastenel tuo .bashrcfile.


@ cosa intendi con alias?
ixtmixilix,

intendevo mantenere i file nella tua directory home e inserire due alias nel tuo .bashrc alias cp2clip = 'bash / home / <username> /cp2clip.sh' e clippaste = 'bash / home / <username> /clippaste.sh' così puoi usarli ovunque. Per saperne di più sugli alias puoi vedere man aliaso linfo.org/alias.html
harish.venkat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.