Как подключить вывод grep к cp?
У меня есть рабочая команда grep
, которая выбирает файлы, удовлетворяющие определенному условию. Как я могу взять выбранные файлы из команды grep
и передать ее в команду cp
?
В конце cp
не удалось выполнить следующие попытки:
grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/
cp: отсутствует операнд файла назначения после '/Home/ubuntu/data/lidar/tmp-ajp2/Попробуйте' cp --help 'для получения дополнительной информации информация.
cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/
cp: неверный параметр - '7'
Ответы
Ответ 1
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/
Пояснение:
- grep
-l
возможность выводить только имена файлов
- xargs для преобразования списка файлов из стандартного ввода в аргументы командной строки
- cp
-t
опция указать целевой каталог (и избежать использования заполнителей)
Ответ 2
вам понадобится xargs с опцией placeholder:
grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
обычно, если вы используете xargs
, он будет вывести команду после, с помощью заполнителя ('{}'
в этом случае), вы можете выбрать место, где оно вставлено, даже несколько раз.
Ответ 3
Чтобы скопировать файлы в найденные каталоги grep, используйте -printf для вывода каталогов и -i, чтобы поместить аргумент команды из xarg (after pipe)
find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {}
копирует copyFile.txt во все каталоги (в./), содержащие "filename"
Ответ 4
grep -rl '/directory/' -e 'pattern' | xargs cp -t/directory