UNIX shell 脚本:如何递归地将文件向上移动一个目录?

jl6*_*jl6 8 script file-management shell file-transfer

我有大量的小文件 f,按目录结构排列,如下所示:

/A/B/C/f

A级有11个目录,B级每个目录约100个,C级每个目录约30个,每个目录有一个文件f。

如何将所有文件上移一层?例如,给定这组文件......

/A/B/C/f1
/A/B/C/f2
/A/B/C/f3
/A/B/C/f4

我希望目录/A/B/包含 4 个文件,f1 到 f4。不需要删除目录 C。

我希望这是一个解决问题,可能涉及findxargswhatnot。有任何想法吗?

干杯,

詹姆士

Gil*_*il' 9

使用 GNU find(在 Linux 上可以找到)或任何其他支持-execdir以下内容的find 非常简单:

find A -type f -execdir mv -i {} .. \;
Run Code Online (Sandbox Code Playgroud)

有一个标准find

find A -type f -exec sh -c 'mv -i "$1" "${1%/*}/.."' sh {} \;
Run Code Online (Sandbox Code Playgroud)

使用 zsh:

zmv -Q -o-i 'A/(**/)*/(*)(.)' 'A/$1$2'
Run Code Online (Sandbox Code Playgroud)

如果目录结构始终具有相同的嵌套级别,则不需要任何递归遍历(但首先删除空目录):

for x in */*; do; echo mv -i "$x"/*/* "$x"/..; done
Run Code Online (Sandbox Code Playgroud)