Tre*_*key 17 command-line bash directory recursive
如何递归地将文件添加(或触摸)到当前目录以及所有子目录中?
例如,
我想把这个目录树:
.
??? 1
? ??? A
? ??? B
??? 2
? ??? A
??? 3
??? A
??? B
??? I
9 directories, 0 files
Run Code Online (Sandbox Code Playgroud)
进入
.
??? 1
? ??? A
? ? ??? file
? ??? B
? ? ??? file
? ??? file
??? 2
? ??? A
? ? ??? file
? ??? file
??? 3
? ??? A
? ? ??? file
? ??? B
? ? ??? file
? ? ??? I
? ? ??? file
? ??? file
??? file
9 directories, 10 files
Run Code Online (Sandbox Code Playgroud)
ter*_*don 16
怎么样:
find . -type d -exec cp file {} \;
Run Code Online (Sandbox Code Playgroud)
来自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
Run Code Online (Sandbox Code Playgroud)
因此,上面的命令将查找所有目录并cp file DIR_NAME/在每个目录上运行。
如果您只想创建一个空文件,则可以使用touch和 shell glob。在 zsh 中:
touch **/*(/e:REPLY+=/file:)
Run Code Online (Sandbox Code Playgroud)
在 bash 中:
shopt -s globstar
for d in **/*/; do touch -- "$d/file"; done
Run Code Online (Sandbox Code Playgroud)
便携,您可以使用find:
find . -type d -exec sh -c 'for d; do touch "$d/file"; done' _ {} +
Run Code Online (Sandbox Code Playgroud)
一些find实现,但不是全部,让你写find . -type d -exec touch {}/file \;
如果要复制一些参考内容,则必须find在循环中调用。在 zsh 中:
for d in **/*(/); do cp -p reference_file "$d/file"; done
Run Code Online (Sandbox Code Playgroud)
在 bash 中:
shopt -s globstar
for d in **/*/; do cp -p reference_file "$d/file"; done
Run Code Online (Sandbox Code Playgroud)
便携:
find . -type d -exec sh -c 'for d; do cp -p reference_file "$d/file"; done' _ {} +
Run Code Online (Sandbox Code Playgroud)