Come copiare un file in più directory con un comando in Linux
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, 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 /
Tuttavia, possiamo eseguire lo stesso compito con un solo comando:
echo dir1 dir2 dir3 | xargs -n 1 file cp1
Ecco come funziona questo comando. Il eco
il comando normalmente scrive sullo schermo. Tuttavia, in questo caso, vogliamo alimentare l'output di eco
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 aggiungendo il prossimo percorso di directory convogliato da esso eco
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
Si noti che se il file da copiare esiste in una qualsiasi delle directory di destinazione specificate, il file in quella destinazione verrà sostituito automaticamente. Non ti verrà chiesto se desideri sostituire il file. (Normalmente, quando usi il cp
comando per copiare un file in una singola posizione, è possibile aggiungere il -io
opzione per chiedere se si desidera sostituire un file esistente. comunque, il -io
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 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
Digitare man echo, man xargs o man cp sulla riga di comando in Linux per ulteriori informazioni su uno qualsiasi di questi comandi.