【问题标题】:Bash script for searching directory and moving files to a new directory, deleting any copies用于搜索目录并将文件移动到新目录、删除任何副本的 Bash 脚本
【发布时间】:2014-04-09 13:23:21
【问题描述】:

我有一个 2TB 的硬盘驱动器,里面装满了备份数据,其中包括数百部电影,由于连续备份同一高清,其中大部分已被复制多次。硬盘驱动器按备份文件夹列表进行组织,每个备份都包含一个电影文件夹,其中包含备份时我的笔记本电脑 HD 上的所有电影。

我想创建一个新的电影文件夹并将所有电影从每个“电影”子文件夹移动到新文件夹中,确保不要将同一部电影移动两次。如果我想通过 Bash 做所有事情,我该怎么做?

【问题讨论】:

    标签: bash file hard-drive


    【解决方案1】:

    假设各个文件夹中的电影的每个副本都具有相同的名称并且都具有相同的扩展名,例如.divx,您可以使用find 找到它们并将它们复制到不同的文件夹,然后删除旧文件夹。

    find / -iname "*.divx" -type f -print0 | xargs -0 -I '{}' mv "{}" /path/to/new_folder/
    

    或者您可以遍历所有文件并将它们复制到 new_folder (仅当它们不存在时)。如果已经存在,请删除其他副本。像这样的:

    for file in $(find . -iname "*.divx" -type f)
    do
    filename=$(basename ${file})
    if [ ! -f ./movie/${filename} ]; then
        mv ${file} ./movie/${filename}
    else
        rm ${file}
    fi
    done
    

    【讨论】:

    • 我建议将 mv -n "$file" ./movie/ && rm -f "$file" 作为循环体的较短等效项。请注意,此代码是损坏的 WRT 空格或文件名中的类似内容。
    • @user2719058 我同意。第一个应该处理带空格的文件名。其次,我刚才举了个例子。
    • 特定电影的所有副本都是相同的,但不同的电影具有不同的扩展名,如 mp4、mkv 等。
    • @user3225710:您可以指定多个文件名模式,例如find . \( -name file1 -o -name file2 -o ... \)
    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2011-04-06
    相关资源
    最近更新 更多