Ho provato a copiare un file test.txt
in più directory con un comando:
cp ~/test.txt ~/folder1 ~/folder2
Ma non ci sono riuscito. C'è un modo per farlo in un comando in modo da poter copiare un file o anche una cartella in più directory?
Ho provato a copiare un file test.txt
in più directory con un comando:
cp ~/test.txt ~/folder1 ~/folder2
Ma non ci sono riuscito. C'è un modo per farlo in un comando in modo da poter copiare un file o anche una cartella in più directory?
cp
può copiare da più fonti, ma impossibile copiare su più destinazioni. Vedi man cp
per maggiori informazioni.
L'unico comando bash che conosco che può copiare / salvare su più destinazioni è tee
.
Puoi usarlo nel tuo caso come segue:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt
Si noti che tee
scrive anche l'input sullo standard output (stdout). Quindi, se non lo vuoi, puoi prevenirlo reindirizzando l'output standard a /dev/null
come segue:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
Un altro modo per ottenere una copia in più posizioni è il seguente comando:
find dir1 dir2 -exec cp file.txt {} \;
Se dir1 o dir2 hanno sottodirectory in cui non vuoi copiare il file, aggiungi
-maxdepth 0
opzione:
find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;
Si noti che questo sovrascriverà ogni file in dir1
e dir2
con il contenuto di file.txt
, oltre a copiarlo. Per copiare solo file.txt
senza influire sugli altri file in queste directory, dire a find
di agire solo sulle directory:
find dir1 dir2 -type d -exec cp file.txt {} \;
Il comando
cp ~/test.txt ~/folder1 ~/folder2
prova a copiare due file ( ~/test.txt
e ~/folder1
) nella destinazione folder2
. (E se ~/folder2
esiste ed è una directory si avrà un avviso "omettendo directory").
Se vuoi fare più copie del file test.txt
, devi usare un loop o più comandi ...
for i in ~/folder1 ~/folder2; do cp ~/test.txt $i; done
(... e fai attenzione se hai spazi incorporati nei nomi dei file, avrai bisogno di quotazioni).
Per copiare intere directory devi usare l'opzione -r
:
for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done
questo creerà ~/folder1/folder3
e ~/folder2/folder3
con tutti i file inclusi.
Puoi creare uno script di aiuto, oppure puoi farlo con xargs
e una funzione di stampa (in questo caso, echo
):
echo firstDir secondDir | xargs -n 1 cp test
Questo renderà ogni directory come argomento alla funzione cp
, usando come parametro il file test .
Dopo una lunga ricerca, anche questo funziona come un incantesimo!
for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done
Questo copierà file.txt in ogni directory nella tua posizione corrente nel terminale.
for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done
Questo copierà una cartella in ogni sottodirectory nella posizione corrente nel terminale.
Lo condivido spero che aiuti anche gli altri.
Se vuoi copiare il file test.txt in ogni directory in / tmp / target / ...
crea un ambiente di test:
mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt
copia:
find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
Ho pensato di dare una variazione alla risposta di Sylvain Pineau
dove dir1
e dir2
non si trovano nella directory corrente.
find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
qui find cercherà dir1
deep di due livelli oppure puoi lasciare fuori -maxdepth
parametro per trovare dir1
in tutte le cartelle nella directory corrente e sotto di esso.
Leggi altre domande sui tag command-line cp