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

时间:2014-03-06 18:03:18

标签: bash file hard-drive

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

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

1 个答案:

答案 0 :(得分: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