Vous devez utiliser cp -t /home/shantanu/tosend
afin de lui dire que l'argument est le répertoire cible et non une source. Vous pouvez ensuite le changer en -exec ... +
afin d'obtenir cp
pour copier autant de fichiers que possible à la fois.
Si votre intention est de copier les fichiers trouvés dans /home/shantanu/tosend
, vous avez l'ordre des arguments à cp
inversé :
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Attention :le find
commande utiliser {}
comme espace réservé pour le fichier correspondant.
j'ai rencontré un problème comme celui-ci...
En fait, de deux manières, vous pouvez traiter find
sortie de la commande en copy
commande
-
Si
find
la sortie de la commande ne contient pas d'espace, c'est-à-dire que 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. Ainsi, 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 find
commande, qui doit être échappée avant d'appuyer sur le bouton Entrée. Sinon, vous obtiendrez une erreur comme celle-ci
find: missing argument to `-exec'
Dans votre cas, la syntaxe de la commande de copie est incorrecte afin de copier le fichier de recherche dans /home/shantanu/tosend
. La commande suivante fonctionnera :
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;