如何将子目录的所有文件移动到另一个目录

Men*_*ris 4 bash command-line macos

我的文件具有以下结构:

11
--11a
-----a.jpg
-----b.jpg
-----....
--11b
-----d.jpg
-----g.jpg
...
Run Code Online (Sandbox Code Playgroud)

我想将所有 .jpg 文件放在一个文件夹中

11
-a.jpg
-b.jpg
-d.jpg
-g.jpg
...
Run Code Online (Sandbox Code Playgroud)

基本上我有包含许多 .jpg 文件的子文件夹,我想将它们全部移动到一个目录(例如父目录)。

我已经尝试过: mv */*.jpg all但我明白了-bash: /bin/mv: Argument list too long

一些帖子建议xargs和其他一些查找解决方案,但不幸的是似乎没有什么对我有用。

AFH*_*AFH 5

如果文件名是唯一的,请使用:

find {base folder}/11 -name "*.jpg" -exec mv {} {base folder}/11/ \;
Run Code Online (Sandbox Code Playgroud)

where{base folder}是目录11所在的位置。

这会mv依次在每个文件上运行命令:这比在单个mv命令中移动所有文件要慢得多,但参数列表的长度没有限制。

如果某些文件名可能是大写,您可以-iname使用-name. 您还可以添加-n以确保不会覆盖已移动的文件(您需要检查您是否mv有此选项 - 如果不使用-i,尽管这会提示冲突)。

您可以使用以下方法删除任何空目录:

rmdir {base folder}/11/*
Run Code Online (Sandbox Code Playgroud)

您将需要调查此命令之后剩余的所有目录。