Найти строку во всех файлах в каталоге

Вы можете использовать опцию -t GNU cp:

   -t, --target-directory=DIRECTORY
          copy all SOURCE arguments into DIRECTORY

Вы также должны использовать опции find -print0 и xargs -0, иначе это приведет к ошибке в именах файлов с пробелами или другими странными символами:

find . -amin -1440 -print0 | xargs -O cp -t /dest

Лучшим подходом может быть использование find и отсутствие xargs вообще:

find . -amin -1440 -exec cp -t /dest {} +

Наконец, поскольку вы упомянули "файлы", вы можете пропустить каталоги, симлинки и других странных зверей и сказать find искать только обычные файлы:

find . -type f -amin -1440 -exec cp -t /dest {} +
1
24.11.2018, 21:58
2 ответа

Я думаю, вы ищете это:

grep -FIrho '{{text}}'. >/tmp/keys.txt
mv -f /tmp/keys.txt.

Или, если вам действительно нужно исключить только файлы .dllи .zip:

find. \( -name '*.zip -o -name '*.dll' \) -prune -o -type f -exec grep -Fho '{{text}}' {} + >/tmp/keys.txt
mv -f /tmp/keys.txt.

Обратите внимание, что keys.txtв конечном итоге будет содержать ноль или более строк {{text}}. Возможно, вы намеревались попросить записать имена файлов, а не совпавший контент? Или, может быть, всю строку, где присутствует {{text}}?

0
28.01.2020, 00:33

В качестве альтернативы рекурсивному вызову grepчерез оболочку и findmagic некоторые программы могут выполнять утомительную работу за вас.

Например, с помощью silversearcher -ag(https://geoff.greer.fm/ag/)или ack(https://beyondgrep.com/)это так же просто, как:

ack '{{text}}'

или

ag '{{text}}'

Преимущество этих инструментов заключается также в том, что по умолчанию они избегают поиска в двоичных файлах или каталогах, таких как .git, .svnи т. д., и работают намного быстрее, чем вызов grepв цикле.

Эти инструменты присутствуют в репозиториях основных дистрибутивов GNU/Linux.

0
28.01.2020, 00:33

Теги

Похожие вопросы