Вы можете использовать опцию -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 {} +
Я думаю, вы ищете это:
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}}
?
В качестве альтернативы рекурсивному вызову grep
через оболочку и find
magic некоторые программы могут выполнять утомительную работу за вас.
Например, с помощью silversearcher -ag(https://geoff.greer.fm/ag/)или ack(https://beyondgrep.com/)это так же просто, как:
ack '{{text}}'
или
ag '{{text}}'
Преимущество этих инструментов заключается также в том, что по умолчанию они избегают поиска в двоичных файлах или каталогах, таких как .git
, .svn
и т. д., и работают намного быстрее, чем вызов grep
в цикле.
Эти инструменты присутствуют в репозиториях основных дистрибутивов GNU/Linux.