Как мне рекурсивно трогать файлы, соответствующие шаблону

8

В моем каталоге ~ / docs я хочу "коснуться" всех файлов, заканчивающихся на .txt

Как я могу это сделать?

Стив Маклеод
источник

Ответы:

20

С find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Вы ищете в ~/docs
  • nameВариант будет соответствовать всем txtфайлам -  execвыполнит команду touchна имя файла, который замещен в{}
  • \;завершает команду и touchбудет вызываться один раз для каждого найденного файла

Замечания:

  • Небольшое отклонение - \+в конце создается одна команда для одновременного запуска touchвсех этих файлов. Это невозможно со всеми командами, но оно работает touchи экономит вам несколько вызовов, если у вас много файлов, на которые влияют.
slhck
источник
4
{} \+было бы лучше здесь ... touchможет обрабатывать много имен файлов в своей командной строке, так, например, с 10 тысячами файлов и {} \; 10 тысяч вызовов будет сделано для touch... Использование {} \+будет вызывать touchтолько один раз (в зависимости от доступной памяти) ... Здесь отрывок из ФАЙНДА людей-страницы: -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. Более подробно в man findдокументации.
Peter.O
@ Peter.O Правда, моя привычка использовать другой синтаксис.
slhck
@slhck: и намного медленнее с большими накладными расходами.
Hello71