J'ai essayé de copier un fichier test.txt
dans plusieurs répertoires avec une seule commande:
cp ~/test.txt ~/folder1 ~/folder2
Mais je n'ai pas réussi. Existe-t-il un moyen de le faire en une seule commande pour pouvoir copier un fichier ou même un dossier dans plusieurs répertoires?
command-line
cp
nux
la source
la source
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Réponses:
cp
peut copier à partir de plusieurs sources, mais ne peut pas copier à plusieurs destinations. Voirman cp
pour plus d'informations.La seule commande bash que je connaisse qui puisse copier / enregistrer vers plusieurs destinations est
tee
.Vous pouvez l'utiliser dans votre cas comme suit:
Notez que
tee
écrit également l'entrée sur la sortie standard (stdout). Donc, si vous ne le souhaitez pas, vous pouvez l’empêcher en redirigeant la sortie standard vers/dev/null
:la source
>/dev/null
travaux avec des fichiers binaires aussi, sans foirer le terminal ...-r
option aveccp
dans le cas des répertoirestee
contrairement auxcp
copies, seul le contenu du fichier ignore son mode, sa propriété, son horodatage. Pour éviter de répéter le nom du fichier:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Une autre façon de réaliser une copie vers plusieurs emplacements est la commande suivante:
Si dir1 ou dir2 ont des sous-répertoires dans lesquels vous ne voulez pas copier le fichier, ajoutez l'
-maxdepth 0
option suivante:Notez que cela écrasera chaque fichier contenu dans
dir1
etdir2
avec sonfile.txt
contenu, en plus de le copier. Pour ne copier quefile.txt
sans affecter les autres fichiers de ces répertoires, ditesfind
d'agir uniquement sur les répertoires:la source
find
et pour deux fois (dans ce cas)cp
. Pour ne pas dire quefind
besoin de beaucoup de temps.La commande
essaie de copier deux fichiers (
~/test.txt
et~/folder1
) vers la destinationfolder2
. (Et si~/folder2
existe et est un répertoire, vous aurez un avertissement "omitting directory").Si vous voulez faire plusieurs copies du fichier
test.txt
, vous devez utiliser une boucle ou plusieurs commandes ...(... et faites attention si vous avez des espaces incorporés dans les noms de fichiers, vous aurez besoin de guillemets).
Pour copier des répertoires entiers, vous devez utiliser l'
-r
option:cela créera
~/folder1/folder3
et~/folder2/folder3
avec tous les fichiers inclus.la source
Vous pouvez créer un script d’aide ou le faire avec
xargs
une fonction d’impression (dans ce cas,echo
):Cela fera de chaque répertoire un argument de la
cp
fonction, en utilisant le fichier test comme paramètre.la source
Après une longue recherche ce travail aussi comme un charme!
Ceci copiera le fichier file.txt dans tous les répertoires de votre emplacement actuel dans le terminal.
Cela copiera un dossier dans chaque sous-répertoire de votre emplacement actuel dans le terminal.
Je le partage j'espère que cela aidera les autres aussi.
la source
zsh
, vous pouvez utiliserfor i in *(/); ...
pour parcourir tous les sous-répertoires afin d'éviter le[ -d ...
test. Extended Globbing est l'une des raisons pour lesquelles je l'aime plusbash
.zsh
, la première commande de cette réponse peut être simplifiée commefor dir in *(/); do cp /path/file.txt "$dir"; done
. Voir zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Si vous souhaitez copier le fichier test.txt dans chaque répertoire de / tmp / target / ...
créer un environnement de test:
copier le:
la source
Je viens de penser à donner une variation à la réponse de
Sylvain Pineau
où
dir1
etdir2
ne sont pas dans votre répertoire actuel.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
ici find cherchera
dir1
deux niveaux de profondeur ou vous pouvez laisser de-maxdepth
paramètre à trouverdir1
dans tous les dossiers du répertoire courant et en dessous.la source