Normalmente, per copiare un file, si usa il
cp
comando, collegamento al file sorgente e alla directory di destinazione:
cp ~/Documents/FileToBeCopied.txt ~/TextFiles/
Per copiarlo su altre due directory, molte persone eseguono il comando altre due volte, con destinazioni diverse:
cp ~/Documents/FileToBeCopied.txt ~/Dropbox/
cp ~/Documents/FileToBeCopied.txt /media/lori/MYUSBDRIVE/
echo dir1 dir2 dir3 | xargs -n 1 cp file1
Ecco come funziona questo comando. Il
echo
il comando normalmente scrive sullo schermo. Tuttavia, in questo caso, vogliamo alimentare l'output di
echo
comando come input per
xargs
comando. Per fare questo, usiamo il simbolo del tubo (
|
) che alimenta l'output da un comando come input a un altro. Il
xargs
il comando eseguirà il
cp
comando tre volte, ogni volta accodando il successivo percorso di directory convogliato dal file
echo
comando fino alla fine del
cp
comando. Sono stati passati tre argomenti
xargs
ma il
-n 1
opzione sul
xargs
comando dice di aggiungere solo uno di questi argomenti alla volta al
cp
comando ogni volta che viene eseguito.
Quindi, per seguire il nostro esempio di prima, i tre separati
cp
i comandi sopra possono essere combinati in un comando come questo:
echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp ~/Documents/FileToBeCopied.txt
cp
comando per copiare un file in una singola posizione, è possibile aggiungere il
-i
possibilità di chiedere se si desidera sostituire un file esistente. comunque, il
-i
l'opzione è un'opzione interattiva (causa il
cp
comando per chiedere l'input dell'utente) e non è possibile utilizzare un'opzione interattiva con
cp
comando quando lo si utilizza in combinazione con
xargs
.)
Un'altra cosa da considerare, è che se si sta copiando un file molto grande, si potrebbe voler aggiungere il no-clobber (
-n
) opzione per
cp
comando nel singolo comando sopra. Questa opzione impedisce automaticamente che un file venga sovrascritto in una destinazione se esiste già lì. Se stai copiando un file molto grande su una rete, potrebbe essere lento e potresti voler evitare di utilizzare le risorse richieste per copiare e sostituire il file. Il seguente comando aggiunge il
-n
opzione, e non copierà il file in nessuna destinazione elencata negli argomenti dell'istruzione echo, se il file esiste già in quella destinazione.
echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt