将所有文件从子目录批量移动到父目录,但文件名称相同

1 shell

我在子目录中有很多文件,我想将它们全部移到父目录中。

前任:

20150530XXXX/1.jpg
20150530XXXX/2.jpg
20150530XXXX/3.jpg
20150530XXXX/4.jpg
20150531XXXX/1.jpg
20150531XXXX/2.jpg
20150531XXXX/3.jpg
20150531XXXX/4.jpg
Run Code Online (Sandbox Code Playgroud)

我在 stackexchange 的另一个问题中发现了以下命令:

find ./ -mindepth 2 -type f -exec mv -t A {} +
Run Code Online (Sandbox Code Playgroud)

但是,这似乎覆盖了图像文件,因为每个文件都具有相同的名称 ( 1-4.jpg)。有没有办法将子目录的名称与文件名连接起来,例如移动20150531XXXX/4.jpg./20150531XXXX_4.jpg

lcd*_*047 5

如果您有(在某些发行perl版上rename命名prename)的版本:

find . -type f -mindepth 2 -name '*.jpg' -exec rename -n 's!/([^/]+)$!_$1!' {} +
Run Code Online (Sandbox Code Playgroud)

这只会向您显示该命令将执行的操作。如果您对此感到满意,请删除-n实际重命名文件的选项(实际重命名不会打印任何内容)。