从目录中删除除文件中列出的文件之外的所有文件

时间:2015-01-23 10:52:06

标签: unix

得到一个类似" index.txt"的文件包含几行书名,如:

book 1.pdf<br>
book 1.opf<br>
book2.epub<br>
book3.opf<br>

等等,1个标题= 1行

我想在bash中做这件事:

rm -rf from $dir IF $file IS NOT in index.txt

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令。

find <dir> -name "*" | grep -vFf index.txt | xargs rm -rf
  

find:列出指定目录中的所有文件
  grep-vFf:使用文件输入反向grep(将列出输入文件中找不到的文件。在这种情况下,它是index.txt)
  xargs rm -rf:删除在该文件中找不到的每个文件   名单。获取此删除列表作为先前grep的输出   命令

编辑:

当文件名包含空格时,请使用以下命令。

find <dir> -name "*" | grep -vFf index.txt |sed 's/^/"/;s/$/"/' | xargs rm -rf
  

sed会为所有文件名添加引号。

答案 1 :(得分:0)

您可以使用

删除txt文件中列出的文件
#!/bin/sh

while read line;
do
rm `echo $dir/line`
done<list.txt