遞歸新增檔案到所有子目錄

遞歸新增檔案到所有子目錄

如何遞歸地將文件新增(或觸碰)到目前目錄以及所有子目錄?

例如,
我想轉動這個目錄樹:

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

答案1

怎麼樣:

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/在每個目錄上運行。

答案2

如果您只想建立一個空文件,則可以使用touchshell 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' _ {} +

答案3

當想要touch在目前目錄和所有子目錄中呼叫名為 $name 的檔案時,這將會起作用:

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

請注意,ChuckCottrill 對 terdon 的答案的評論不起作用,因為它只會touch當前目錄中名為 $name 的檔案和目錄本身。

它不會按照OP的要求在子目錄中建立文件,而這裡的版本會。

答案4

我剛剛測試的另一個例子是在特定的子目錄中建立連續的文件,就像我在這裡一樣。

├── FOLDER
│   ├── FOLDER1
│   └── FOLDER2
├── FOLDER
│   ├── FOLDER1
│   └── FOLDER2
└── FOLDER
    ├── FOLDER1
    └── FOLDER2

我使用下面的命令僅在 FOLDER2 目錄中建立具有連續編號序列的文件,例如file{1..10}

for d in **/FOLDER2/; do touch $d/file{1..10}.doc; done

相關內容