2011-03-09 6 views
77

Pourquoi les éléments suivants ne copient-ils pas les fichiers dans le dossier de destination?Rechercher et copier des fichiers

# 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' 

Répondre

192

Si votre intention est de copier les fichiers trouvés dans/home/Shantanu/tosend vous avez l'ordre des arguments à cp inversée:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \; 

Remarque: trouver, utiliser la commande {} comme espace réservé pour le fichier correspondant

+3

Quel est le but de '\;'? – Astrid

+2

@Astrid vérifier [this] (http://unix.stackexchange.com/questions/12902/how-to-run-find-exec) – shellbye

+0

Ahh je vois @shellbye - merci – Astrid

6

Vous devez utiliser cp -t /home/shantanu/tosend pour indiquer que l'argument est le répertoire cible et non une source. Vous pouvez ensuite le modifier à -exec ... + afin d'obtenir cp pour copier autant de fichiers que possible à la fois.

+2

Dans linux a dû spécifier le répertoire cible comme ceci: 'find/home/shantanu/traitée/-name '* 2011 * .xml' -exec cp --target-directory =/home/shantanu/tosend { } \; ' – GuruM

+0

+1 pour votre réponse utile @Ignacio Vazquez-Abrams – GuruM

+3

Cette réponse pourrait être améliorée et raccourcie si la commande complète a été fournie comme dans la première réponse. – Brian

22

je faisais face à un problème quelque chose comme ça ...

En fait, de deux façons vous pouvez traiter la sortie find de commande dans copy commande

  1. Si la sortie de la commande find ne contient aucun-à-dire de l'espace 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/

  2. Mais la plupart du temps, nos fichiers de données de production peuvent contenir de l'espace. Ainsi, la plupart du temps commande mentionnés ci-dessous est plus sûr:

    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 iE point-virgule est également considérée comme faisant partie de commandement find, cela devrait être échappé 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, syntaxe de commande de copie est erroné afin de copier le fichier trouver dans /home/shantanu/tosend. La commande suivante fonctionnera:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \; 
+0

3. Si vous avez GNU 'find' /' xargs', 'find -print0 | xargs -0 -r cp -t '. Exemple: 'find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/' –

-2

La raison de cette erreur est que vous essayez de copier un dossier qui nécessite l'option -r également cp Merci

+3

Salut, comme la question a déjà été répondue (il y a quelque temps) ce n'est pas vraiment une réponse pertinente, ça devrait aussi être un commentaire (quand vous avez plus de rep), sauf si vous le souhaitez pour l'élargir et l'expliquer. Juste un heads-up :). – W1ll1amvl

Questions connexes