Pourquoi ce qui suit ne copie-t-il pas les fichiers dans le dossier de destination?
# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
Si votre intention est de copier les fichiers trouvés dans/home/shantanu/tosend, l'ordre des arguments de cp est inversé:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
Remarque: la commande find utilise {} en tant qu'espace réservé pour le fichier correspondant.
j'ai fait face à un problème quelque chose comme ça ...
En fait, vous pouvez traiter de deux manières _ la sortie de la commande find
dans la commande copy
Si la sortie de la commande find
ne contient aucun espace, c'est-à-dire si le nom du fichier ne contient pas d'espace, vous pouvez utiliser la commande ci-dessous:
Syntaxe: find <Path> <Conditions> | xargs cp -t <copy file path>
Exemple: find -mtime -1 -type f | xargs cp -t inner/
Mais la plupart du temps, nos fichiers de données de production peuvent contenir de l’espace. Donc, la plupart du temps, la commande mentionnée ci-dessous est plus sûre:
Syntaxe: find <path> <condition> -exec cp '{}' <copy path> \;
Exemple find -mtime -1 -type f -exec cp '{}' inner/ \;
Dans le deuxième exemple, la dernière partie, le point-virgule, est également considérée comme faisant partie de la commande find
, à échapper avant d'appuyer sur le bouton d'entrée. Sinon, vous obtiendrez une erreur quelque chose comme ça
find: missing argument to `-exec'
Dans votre cas, la syntaxe de commande de copie est fausse afin de copier le fichier trouvé dans /home/shantanu/tosend
. La commande suivante fonctionnera:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;
Vous devez utiliser cp -t /home/shantanu/tosend
pour lui dire que l'argument est le répertoire cible et non une source. Vous pouvez alors le changer en -exec ... +
afin de permettre à cp
de copier autant de fichiers que possible à la fois.