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

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

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

. ├── 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 

  • Как узнать глубину пикселя моей графической карты?
  • Почему в команде bash отсутствуют псевдонимы?
  • Что означает знак @ в выводе ls на терминале Mac OSX Lion?
  • труба в качестве аргументов
  • Как использовать регулярный оператор шаблона {m, n} в grep?
  • Попытался переместить файл с помощью команды mv и теперь он потерян?
  • Можно ли скопировать relpath в одну команду?
  • Команда rm возвращает сообщение 12345 Что это значит?
  • 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 - лучшая ОС в мире.