Как передать вывод из grep в cp?

Я grep команда, которая выбирает файлы, удовлетворяющие определенному условию. Как я могу взять выбранные файлы из grep команда и передать его в ?

следующие попытки не удалось на cp конце:

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

cp: отсутствует операнд файла назначения после ‘/дом/Убунту/данные/лидар/ТМП-ajp2/’ попробовать 'СР --Help' для получения более информация.


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

cp: неверно вариант -- '7'

5 ответов


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

объяснение:

  • grep -l возможность вывода только имен файлов
  • xargs для преобразования списка файлов из стандартного ввода в аргументы командной строки
  • cp -t возможность указать целевой каталог (и избегать использования заполнителей)

вам нужно xargs С местозаполнитель:

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

обычно, если вы используете xargs, он будет выводить после команда, с заполнителем ('{}' в этом случае), вы можете выбрать место, где он вставлен, даже несколько раз.


это сработало для меня при поиске файлов с определенной датой:

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

чтобы скопировать файлы в найденные каталоги grep, используйте -printf для вывода каталогов и-i для размещения аргумента команды из xarg (после канала)

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

это копирует copyFile.txt для всех каталогов (in ./ ) содержащий "filename"


греп -РЛ '/каталог/' -е 'шаблон' | команды xargs ср -т /справочник