我有两个文件,让我们说
root@test:~ $ cat File1.txt
name1
name2
name3
root@test:~$ cat File2.txt
name4
name5
name6
以及具有多个文件名的目录
root@test:~$ ls
name1
name2
name3
name4
name5
name6
name7
name8
name9
如何删除两个.txt文件上没有的文件?所以最终结果将是
root@test:~$ ls
name1
name2
name3
name4
name5
name6
是否可以用bash写一些东西来做这个???
答案 0 :(得分:3)
在要删除文件的目录中:
for f in *; do
[ -z $(grep "^${f}$" <(cat /dir/with/File*.txt)) ] && echo rm -f "$f"
done
将打印出要删除的文件列表。要实际删除它们,请删除echo
。
答案 1 :(得分:0)
我会用这样的东西测试:
while read -r -d $'\0'; do
if grep -qs "^$REPLY\$" File1 && grep -qs "^$REPLY\$" File2; then
# Filename found in both File1 and File2: do nothing
:
else
rm -i "$REPLY"
fi
done < <(find . -maxdepth 1 -type f -print0)
除非我遗漏了某些内容,否则应该正确处理带有嵌入空格,换行符和反斜杠的文件名。
一旦您确信它正在执行您想要的操作,就可以从-i
中删除交互式标记(rm
)。