大家好,我对一个表面上看起来应该很简单的过程有点坚持,但我发现它具有挑战性。自从我做了很多 bash 脚本以来已经有一段时间了,所以也许我只是生疏了。
我正在尝试遍历目录树并根据扩展名将文件排序到不同的子目录中。在每个子目录中,我都有一系列图像文件,我想将所有具有 .RAW 扩展名的文件移动到一个名为 RAW 的新子目录中(如果它不存在,则创建它)并将其余文件保留在原处。哦,是的,一些文件夹和文件名包含空格只是为了让生活更有趣。
基本操作:
遍历子目录
在每个子目录中
检查是否存在扩展名为 .RAW 的文件
如果是,则创建一个名为 RAW 的新目录并将所有匹配的文件移动到那里
这是一个澄清的例子
Dir1
|--subdir 1
| |--file1.jpg
| |--file2.jpg
| |--file3.RAW
| |--file4.RAW
|
|--subdir 2
| |--file1.jpg
| |--file2.jpg
| |--file3.RAW
| |--file4.RAW
我想要的结果是:
Dir1
|--subdir 1
| |--RAW
| | |--file3.RAW
| | |--file4.RAW
| |
| |--file1.jpg
| |--file2.jpg
|
|--subdir 2
| |--RAW
| | |--file3.RAW
| | |--file4.RAW
| |
| |--file1.jpg
| |--file2.jpg
我开始尝试使用像这样的循环
for dir in */ do cd $dir; mkdir RAW; for files in *.RAW do mv $files ./RAW; done; done
不过,这并不是我想要的,而且名称中的空格也不能很好地发挥作用。我玩过一些 find ,但似乎无法让它发挥作用。我觉得我在这里错过了一个优雅的解决方案。有什么建议么?