Pourquoi les éléments suivants ne copient-ils 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'
\;
?find -iname '*.mp3' -mtime -1 -exec cp {} /home/my_path/ \;
y a-t-il quelque chose qui ne va pas avec cette commande? ça ne marche pasJ'ai rencontré un problème comme celui-ci ...
En fait, de deux manières, vous pouvez traiter la
find
sortie decopy
commande dans la commandeSi
find
la sortie de la commande ne contient aucun espace, c'est-à-dire si le nom du fichier ne contient pas d'espace, vous pouvez utiliser la commande mentionnée 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, c'est-à-dire le point-virgule, est également considérée comme faisant partie de la
find
commande, qui doit être échappée avant d'appuyer sur le bouton Entrée. Sinon, vous obtiendrez une erreur comme celle-ciDans votre cas, la syntaxe de la commande de copie est incorrecte pour copier le fichier de recherche dans
/home/shantanu/tosend
. La commande suivante fonctionnera:la source
find
/xargs
,find <Path> <Conditions> -print0 | xargs -0 -r cp -t <copy file path>
. Exemple:find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/
Vous devez utiliser
cp -t /home/shantanu/tosend
pour lui indiquer que l'argument est le répertoire cible et non une source. Vous pouvez ensuite le changer-exec ... +
pour pouvoircp
copier autant de fichiers que possible à la fois.la source
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp --target-directory=/home/shantanu/tosend {} \;
la source
La raison de cette erreur est que vous essayez de copier un dossier qui nécessite l'option -r également pour cp Merci
la source