用于搜索目录并将文件移动到新目录、删除任何副本的 Bash 脚本

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 ... \)

以上是关于用于搜索目录并将文件移动到新目录、删除任何副本的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

用于将所有* .512.png移动到新文件夹的脚本

Python:读取文本文件并将其中列出的目录复制/粘贴到新目录

将yii站点转移到新服务器

Java:监视目录以移动大文件

Linux文件基本操作

将其移动到不同目录后无法看到我的网页