Bash

遞歸地將文件添加到所有子目錄

  • May 11, 2021

如何遞歸地將文件添加(或觸摸)到目前目錄以及所有子目錄?

例如,

我想打開這個目錄樹:

.
├── 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' _ {} +

引用自:https://unix.stackexchange.com/questions/94207