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'
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/
Explication:
-l
option pour les noms de fichiers en sortie uniquement-t
pour spécifier le répertoire cible (et éviter d'utiliser des espaces réservés)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.
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/
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"
grep -rl '/ répertoire /' -e 'pattern' | xargs cp -t/répertoire