Bash: найти файлы, содержащие определенную строку, и скопировать их в папку - PullRequest
1 голос
/ 04 февраля 2020

Что я хочу: В сценарии bash: найти все файлы в текущем каталоге, которые содержат определенную строку «testtring», и скопировать их в подпапку »./testfolder"

Нашел это, чтобы найти имена файлов, которые я ищу

найти. -тип f -print0 | xargs -0 grep -l "teststring"

.. и это для копирования найденных файлов в другую папку (здесь выбирается по строкам в имени файла):

find. -type f -iname " stringinfilename " -exe c cp {} ./testfolder/ \;

Какой лучший способ объединить обе команды для достижения того, что я описал наверху?

1 Ответ

2 голосов
/ 04 февраля 2020

Просто позвольте find сделать оба:

find . -name subdir -prune -o -type f -exec \
    grep -q teststring "{}" \; -exec cp "{}" subdir \;  

Обратите внимание, что подобные вещи намного проще, если вы не пытаетесь добавить их в каталог, в котором вы работаете. Другими словами, пишите в Dibling Dir вместо записи в подкаталог. Если вы хотите получить данные в подкаталоге, mv, когда закончите. Таким образом, вам не нужно беспокоиться о prune (ie, вам не нужно беспокоиться о поиске, спускающемся в subdir и попытке дублировать работу).

...