J'ai en fait essayé une réponse existante de: Comment copier un fichier dans plusieurs dossiers en utilisant la ligne de commande? où j'ai utilisé la commande:
find folder -exec cp file.txt {} \;
Je voulais l'utiliser parce que je voulais copier un fichier nommé 'file.txt' dans un répertoire nommé 'folder' et tous ses sous-répertoires sans mentionner tous les répertoires de la commande.
Cependant, cela a fini par remplacer le contenu de chaque fichier dans 'folder' et ses sous-dossiers par le contenu de 'file.txt'. Par exemple, s'il y avait un dossier 'foo.txt' à l'intérieur, il conserverait toujours le nom 'foo.txt' mais tout son contenu serait remplacé par celui de 'file.txt'. Cela m'a perplexe et j'ai essayé le drapeau interactif suivant:
find folder -exec cp -i file.txt {} \;
et j'ai reçu des invites de remplacement pour chaque fichier du répertoire "dossier" et tous ses sous-répertoires, même si les noms étaient tous différents.
Quelqu'un peut-il m'aider à comprendre ce qui se passe et quelle devrait être la commande appropriée?
Vous devez restreindre find
à ne répertorier que les répertoires :
find folder -type d -exec cp file.txt {} \;
De plus, à l'avenir, lorsque vous cp
irez dans un répertoire où le nom du répertoire provient d'une autre commande, utilisez le -t
option pour vous assurer qu'il s'agit bien d'un répertoire:
find folder -type d -exec cp -t {} file.txt \;
De man cp
:
-t, --target-directory=DIRECTORY
copy all SOURCE arguments into DIRECTORY
Donc, si un fichier est fourni comme argument à -t
, cp
se plaindra automatiquement.
ne autre réponse à cette question utilise -type d
.