In questa breve guida, discuteremo come copiare un file in più directory dalla riga di comando usando find
, cp
, echo
, xargs
e tee
comandi su Linux.
L'altro giorno volevo copiare alcuni video in cartelle diverse nel mio desktop Arch Linux. Come già saprai, possiamo farlo facilmente facendo clic con il tasto destro del mouse sul file, selezionando Copy
opzione dal menu contestuale e incollarlo nella directory/cartella di destinazione.
Tuttavia, vorrei sapere se esiste un altro modo per copiare il file in più directory in una volta . Ho pensato che sarebbe stato d'aiuto quando volevo copiare un singolo file in un numero di directory diverse contemporaneamente. Ho fatto alcune ricerche sul Web e ho trovato le seguenti soluzioni.
Avviso importante:
Si prega di notare che i seguenti comandi non chiederanno alcuna conferma. Se esiste un file con lo stesso nome nella directory di destinazione, verrà sostituito automaticamente.
Se non conosci Linux, ti suggerisco di testare i comandi in qualsiasi macchina di prova prima di iniziare a usarli nella produzione. In questo modo puoi prevenire l'inutile perdita di dati.
Copia un file in più directory dalla riga di comando su Linux
Ho un file di testo chiamato ostechnix.txt
nella mia home directory e volevo copiarlo in due directory diverse chiamate Downloads
e Documents
in una volta sola.
Per prima cosa, vediamo come copiare il file in più directory diverse usando find
e cp
comandi.
Metodo 1:utilizzo dei comandi trova e cp
Possiamo copiare un singolo file in più directory contemporaneamente usando find
e cp
comandi.
Il find
è un comando Unix e Linux per cercare file in una gerarchia di directory e il comando cp viene utilizzato per copiare file e directory.
Per copiare un file chiamato ostechnix.txt
a ~/Downloads
e ~/Documents
directory utilizzando find
e cp
comando, esegui:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} \;
Il comando precedente copierà il file ostechnix.txt nella directory corrente nel ~/Downloads
e ~/Documents
directory.
Se non specifichi '-maxdepth 0'
opzione, il ostechnix.txt
il file verrà copiato in ~/Downloads
, ~/Documents
directory e anche nelle loro sottodirectory. Quindi, non dimenticare di specificarlo.
Come ho avvertito in precedenza, se è già presente qualche file con lo stesso nome (ad esempio ostechnix.txt
) in una qualsiasi delle directory di destinazione, il comando sopra sovrascriverà semplicemente il file esistente senza alcuna conferma.
Se non vuoi sovrascrivere il file esistente, puoi usare -n
contrassegnare con cp
comando come di seguito:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} \;
Ora, non sostituirà il file di destinazione se esiste già nelle posizioni di destinazione.
Metodo 2:utilizzo dei comandi echo, xargs e cp
L'altro modo per copiare file in più posizioni è usare echo
, xargs
e cp
comandi.
Come già saprai, il cp
comando viene utilizzato per copiare i file e le directory e xargs
comando viene utilizzato per creare ed eseguire righe di comando dallo standard input.
Per copiare un file in più directory usando echo
, xargs
e cp
comandi, esegui:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
Analizziamo il comando precedente e vediamo come funziona.
In genere, l'echo
comando stampa la stringa o il testo specificati sullo standard output. Ma in questo caso, convogliamo l'output di echo
comando a xargs
. Qui, echo
il comando invierà il percorso della directory a xargs
come input.
xargs
il comando esegue il cp
comando due volte e aggiunge il percorso di ogni directory alla fine del cp
comando.
Il xargs
command riceve due argomenti (cioè il percorso della directory) da echo
comando. Il -n 1
opzione su xargs
il comando dice a xargs
per aggiungere solo uno di quegli argomenti alla volta.
Anche in questo caso, il comando precedente sostituisce il file di destinazione che già esiste. Se non vuoi sostituire il file di destinazione, aggiungi -n
flag nel comando:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt
Metodo 3 - Utilizzo del comando tee
Tee
è un'utilità Unix e Linux utilizzata per leggere dallo standard input e scrivere su file e output standard.
Ora, copiamo il otechnix.txt file in due directory diverse denominate /home/sk/Downloads
e /home/sk/Documents
.
Per farlo, esegui semplicemente il seguente comando dal Terminale:
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt
Il comando precedente copierà il ostechnix.txt
file dalla home directory a ~/Downloads
e ~/Documents
directory.
Tieni presente che tee
il comando scriverà anche l'input nello standard output. Se non vuoi tee
comando per fare ciò, reindirizza l'output standard a /dev/null
come mostrato di seguito.
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null
Ancora una volta ti avverto. Se è già presente un file con lo stesso nome (ad esempio ostechnix.txt
) nelle destinazioni, il comando sopra sovrascriverà il file esistente.
Per i dettagli, controlla le pagine di gestione dei comandi precedenti:
$ man cp
$ man find
$ man xargs
$ man echo
$ man tee
Conclusione
Questo è il modo in cui copiamo un file in più directory contemporaneamente dalla riga di comando in Linux. Potrebbero esserci altri modi, ma credo che questi comandi siano molto semplici e facili da usare.
Ancora una volta, assicurati che i percorsi di destinazione siano corretti e, soprattutto, assicurati che non esista alcun file con lo stesso nome nella posizione di destinazione.
Lettura correlata:
- Come trovare e copiare determinati tipi di file da una directory all'altra in Linux
- Copia tipi di file specifici mantenendo la struttura delle directory in Linux
- Copia file e crea directory di destinazione contemporaneamente
- Come copiare file e modificare contemporaneamente la proprietà e le autorizzazioni
- Come mantenere intatte la proprietà e le autorizzazioni dei file durante la copia di file o directory
- Riprendi i file parzialmente trasferiti su SSH utilizzando Rsync
- Come trasferire rapidamente file di grandi dimensioni in rete in Linux e Unix
- Copia avanzata:aggiungi la barra di avanzamento ai comandi cp e mv in Linux
- Copia i contenuti dei file negli Appunti senza visualizzarli