web-dev-qa-db-fra.com

Comment diriger la sortie de grep vers cp?

J'ai une commande grep de travail qui sélectionne les fichiers répondant à une certaine condition. Comment puis-je prendre les fichiers sélectionnés dans la commande grep et les rediriger vers une commande cp?

Les tentatives suivantes ont échoué à la fin de la cp:

grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/

cp: opérande du fichier de destination manquant après '/ Home/ubuntu/data/lidar/tmp-ajp2 /' Essayez 'cp --help' pour plus d'informations information.


cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/

cp: option non valide - '7'

21
Borealis
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/

Explication:

  • grep -l option pour les noms de fichiers en sortie uniquement
  • xargs pour convertir la liste de fichiers de l'entrée standard en arguments de ligne de commande
  • option cp -t pour spécifier le répertoire cible (et éviter d'utiliser des espaces réservés)
27
kostya

vous avez besoin de xargs avec l'option placeholder:

grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/

normalement, si vous utilisez xargs, la sortie après la commande, avec l’espace réservé ('{}' dans ce cas), vous pouvez choisir l’emplacement où elle est insérée, même plusieurs fois.

16
Chris Maes

Cela a fonctionné pour moi lors de la recherche de fichiers avec une date spécifique:

 ls | grep '2018-08-22' | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
3
MAbraham1

Pour copier des fichiers dans les répertoires trouvés de grep, utilisez -printf pour les répertoires de sortie et -i pour placer l'argument de commande à partir de xarg

find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {}

ceci copie copyFile.txt dans tous les répertoires (en ./) contenant "filename"

0
Jason

grep -rl '/ répertoire /' -e 'pattern' | xargs cp -t/répertoire

0
SomyaThatoi