Voudrait copier chaque fichier d'une structure de répertoires vers un répertoire spécifique uniquement si le fichier n'existe pas déjà.
Vous avez la première partie de cette question de débordement de pile :
find . -type f -exec cp {} /target-directory \;
Comment puis-je vérifier si le fichier existe ou non? Sinon, copiez le fichier, sinon sautez.
command-line
bash
files
find
monsieur au
la source
la source
Réponses:
Vous pouvez utiliser la
-u
commande switch fromcp
:ou utilisez la
rsync
commande avec--ignore-existing
:Exemple:
la source
Votre commande d'origine peut être réécrite comme:
La clé ici est que nous appelons shell avec des commandes spécifiques et passons le fichier trouvé en
$1
argument. En cas d'test -e /target-directory/"$1"
échec, cela signifie que le fichier n'existe pas, auquel cascp
il copiera le fichier.En général, on peut utiliser d'autres commandes, tant que la commande peut vérifier l'existence d'un fichier. Certaines des autres alternatives:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
la source
stat
tester l'existence d'un fichier dans Bash? Ce ne serait pastest -e
beaucoup plus simple?Lisez
man cp
et utilisez l'--no-clobber
option pourcp
.la source