Как передать вывод из 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"