递归添加文件到所有子目录

递归添加文件到所有子目录

如何递归地将文件添加(或触摸)到当前目录以及所有子目录中?

例如,
我想转动这个目录树:

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

相关内容