我有两个文件夹(带子文件夹),其中包含的文件基本上都包含相同的内容。
例子:
/folder/files/data/new/folder/files/data/old有没有办法通过严格的文件名(未修改日期)删除 /new 中已经在 /old 中的所有文件,以防止我重新读取重复文件。
下面的代码不仅会搜索old目录,还会搜索其子目录,并从new目录中删除具有相同名称和路径的文件。这将适用于所有恶意文件名(空格、换行符等):
cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;
Run Code Online (Sandbox Code Playgroud)
该参数-type f告诉find查找文件,而不是目录。该-exec ... \;参数find表明,一旦在 中找到文件old,它就应该rm -f在new子目录中的对应文件上运行该命令。
因为rm给出了-f选项,它会默默地忽略不存在的文件。这消除了new在尝试删除文件之前测试文件是否存在的需要。此外,它不会在删除文件之前提示。这在删除大量文件时非常方便。但是,请确保在运行此脚本之前确实要删除这些文件。为了保护,如果cd命令失败,脚本将退出并显示错误。