Come copiare un file in più directory con un comando in Linux

0
92

Copiare un file con la riga di comando di Linux è facile. Tuttavia, cosa succede se si desidera copiare lo stesso file in diverse posizioni? Anche questo è facile e ti mostreremo come farlo con un solo comando.

Normalmente, per copiare un file, si usa il cp comando, collegando al file sorgente e alla directory di destinazione:

cp ~/Documents/FileToBeCopied.txt ~/TextFiles/

Per copiarlo in 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/

01_entering_cp_command_three_times

Tuttavia, possiamo fare la stessa attività con un solo comando:

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 ciò, utilizziamo il simbolo pipe ( | ) che alimenta l'output di un comando come input per un altro. Il xargs comando eseguirà il cp comando tre volte, ogni volta aggiungendo il percorso di directory successivo inviato ad esso dal file echo passare alla fine del cp comando. Sono stati passati tre argomenti xargs , ma il -n 1 opzione su xargs Il comando dice di aggiungere solo uno di quegli argomenti alla volta a cp comando ogni volta che viene eseguito.

Quindi, per attenerci al 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

02_using_single_command

Si noti che se il file da copiare esiste in una delle directory di destinazione specificate, il file in quella destinazione verrà sostituito automaticamente. Non ti verrà chiesto se desideri sostituire il file. (Normalmente, quando si utilizza il cp comando per copiare un file in una singola posizione, è possibile aggiungere il -i opzione per chiedere se si desidera sostituire un file esistente. comunque, il -i L'opzione è un'opzione interattiva (causa il cp comando per richiedere input dall'utente) e non è possibile utilizzare un'opzione interattiva con il cp comando quando lo si utilizza insieme a xargs .)

Un'altra cosa da considerare è che se stai copiando un file molto grande, potresti voler aggiungere il no-clobber ( -n ) all'opzione 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 necessarie per copiare e sostituire il file. Il seguente comando aggiunge il -n e non copierà il file in nessuna destinazione elencata negli argomenti nell'istruzione echo, se il file esiste già in quella destinazione.

echo ~/TextFiles/ ~/Dropbox /media/lori/MYUSBDRIVE | xargs -n 1 cp -n ~/Documents/FileToBeCopied.txt

03_single_command_with_no_clobber

Digitare man echo, man xargs o man cp nella riga di comando in Linux per ulteriori informazioni su uno di questi comandi.