Bash
遞歸地將文件添加到所有子目錄
如何遞歸地將文件添加(或觸摸)到目前目錄以及所有子目錄?
例如,
我想打開這個目錄樹:
. ├── 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
怎麼樣:
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
和 shell 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
循環呼叫。在 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' _ {} +