【发布时间】:2013-09-06 11:23:35
【问题描述】:
大家好,我有点卡在一个表面上看起来应该很简单的过程,但我发现它具有挑战性。我已经有一段时间没有编写很多 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 ,但似乎无法让它发挥作用。我觉得我在这里错过了一个优雅的解决方案。有什么建议吗?
【问题讨论】: