Bash - 将所有文件从子目录移动到文件夹

时间:2016-06-30 16:40:10

标签: bash move

/volume1/TVPack/A/Folder1/Folder11/ --> files
/volume1/TVPack/A/Folder2/Folder22/ --> files
/volume1/TVPack/B/Folder3/Folder33/ --> files
(the list goes on)...

我想将所有文件从 Folder11 / 22 移至/ volume1 / TVPack / A 以及 Folder33 到/ volume1 / TVPack / B 的所有文件 的 即,向上移动2级

我正在使用的代码是

find /volume1/TVPack/*/ -type f -mindepth 3 -exec mv -- {} /volume1/TVPack/*/ \;

但是这会将所有文件只放在文件夹B中,而不是将相应的文件放到A,将各自的文件放到B中。

我在任务调度程序上执行此操作,因此我认为我无法使用mv * .[^.]*

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

在执行命令之前,使用-execdir,即cd到每个文件所在的目录。

find /volume1/TVPack/*/ -type f -mindepth 3 -execdir mv -- {} ../../ \;

更好的是,使用+代替\;来最小化mv命令的数量。

find /volume1/TVPack/*/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +