Рекурсивно добавьте файл во все подкаталоги

Как я могу рекурсивно добавить (или коснуться) файл в текущий каталог, а также все подкаталоги?

Например,
Я хотел бы включить это дерево каталогов:

. ├── 1 │  ├── A │  └── B ├── 2 │  └── A └── 3 ├── A └── B └── I 9 directories, 0 files 

в

 . ├── 1 │  ├── A │  │  └── file │  ├── B │  │  └── file │  └── file ├── 2 │  ├── A │  │  └── file │  └── file ├── 3 │  ├── A │  │  └── file │  ├── B │  │  ├── file │  │  └── I │  │  └── file │  └── file └── file 9 directories, 10 files 

  • Перемещение файлов без расширения с помощью mv
  • Почему команда grep игнорирует период в строке поиска?
  • Как просмотреть rss-канал для новых записей из сценария bash?
  • Как ответить YES автоматически командой cryptsetup luksFormat?
  • Зачем учиться C вообще?
  • Как эмулировать эффект KWin по командной строке?
  • Опции umask vs -m, --mode
  • Отправка HTML с помощью Mutt (или другого клиентского терминала)
  • 4 Solutions collect form web for “Рекурсивно добавьте файл во все подкаталоги”

    Как насчет:

     find . -type d -exec cp file {} \; 

    От man find :

      -type c File is of type c: d directory -exec command ; Execute command; All following arguments to find are taken to be arguments to the command until an argument consisting of `;' is encountered. The string `{}' is replaced by the current file 

    Таким образом, команда выше найдет все каталоги и запустит cp file DIR_NAME/ на каждом из них.

    Если вы просто хотите создать пустой файл, вы можете использовать touch и glob оболочки. В zsh:

     touch **/*(/e:REPLY+=/file:) 

    В bash:

     shopt -s globstar for d in **/*/; do touch -- "$d/file"; done 

    В переносном режиме вы можете использовать find :

     find . -type d -exec sh -c 'for d; do touch "$d/file"; done' _ {} + 

    Некоторые find реализации, но не все, позволяют писать find . -type d -exec touch {}/file \; find . -type d -exec touch {}/file \;

    Если вы хотите скопировать некоторый ссылочный контент, вам придется вызвать find в цикле. В zsh:

     for d in **/*(/); do cp -p reference_file "$d/file"; done 

    В bash:

     shopt -s globstar for d in **/*/; do cp -p reference_file "$d/file"; done 

    Портабельно:

     find . -type d -exec sh -c 'for d; do cp -p reference_file "$d/file"; done' _ {} + 

    Чтобы фактически создать файл, вы можете использовать touch с find :

     $ find . -type d -exec touch {}/file \; 

    Если вы хотите touch файлов с именем $ name в текущем каталоге и во всех подкаталогах, это будет работать:

     find . -type d -exec touch {}/"${name}" \; 

    Обратите внимание, что комментарий ChuckCottrill к ответу terdon НЕ работает, поскольку он touch только файла с именем $ name в текущем каталоге и самой директории.

    Он не будет создавать файлы в подкаталогах по запросу OP, в то время как эта версия будет здесь.

    Linux и Unix - лучшая ОС в мире.