我有2个不同的递归目录,在一个目录中有200个 .txt 文件在另一个目录中有210个 .txt 文件,需要一个脚本来查找不同的文件名和将它们从目录中删除。
答案 0 :(得分:3)
可能有更好的方法,但我想:
find directory1 directory2 -name \*.txt -printf '%f\n' |
sort | uniq -u |
xargs -I{} find directory1 directory2 -name {} -delete
find directory1 directory2 -name \*.txt -printf '%f\n'
:
打印与glob *.txt
sort | uniq -u
:
只打印唯一的行(如果你想删除重复的,那就是uniq -d
)
xargs -I{} find directory1 directory2 -name {} -delete
:
删除它们(重新指定缩小搜索范围的路径,避免删除初始搜索路径之外的文件)
感谢@KlausPrinoth提出的所有建议。
显然,我假设使用GNU用户空间,我认为运行提供最低POSIX兼容性的工具的人将能够适应它。
答案 1 :(得分:1)
另一种方法是使用diff
,它能够更好地查找目录中文件的文件差异。例如,如果d1
和d2
分别包含200和210个文件(前200个文件相同),则可以使用diff
和process substitution
来提供要移除到while循环的名称:
( while read -r line; do printf "rm %s\n" ${line##*: }; done < <(diff -q d1 d2) )
输出(d1包含10个文件,d2包含12个文件)
rm file11.txt
rm file12.txt
diff
不适合所有情况,但找到目录差异并且非常灵活。