【问题标题】:Bash finding files in subdirectories and move them into a new folderBash 在子目录中查找文件并将它们移动到新文件夹中
【发布时间】: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 ,但似乎无法让它发挥作用。我觉得我在这里错过了一个优雅的解决方案。有什么建议吗?

【问题讨论】:

    标签: bash find


    【解决方案1】:

    试试这个命令:

    #!/bin/bash
    find Dir1 -mindepth 1 -type f -name '*.RAW' | while read -r FILE; do
        DIRNAME=${FILE%/*}
        mkdir -p "$DIRNAME/RAW" && mv "$FILE" "$DIRNAME/RAW/"
    done
    

    【讨论】:

    • 哇,很抱歉延迟了很长时间的回复。有一个新宝宝会做到这一点。这成功了,它似乎不是特别有效,但我不知道这是因为我的系统还是现在执行的方式。谢谢您的帮助。我知道有比我用头撞的更好的方法。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多