Shell脚本:如何删除目录中除文件中列出的文件以外的所有文件?

时间:2015-09-02 08:52:22

标签: bash shell

我有一个包含许多文件和子目录的目录(~/temp/),在某些目录中,它们可能包含其他文件和子目录。 此外,在目录(~/temp/)中,它包含一个名为kept.txt的特殊txt文件,它列出了~/temp/中包含的一些直接文件和子目录,现在我要删除所有~/temp/kept.txt文件中没有列出$ tree temp/ -F temp/ ├── a/ ├── b/ ├── c/ │   ├── f2.txt │   └── z/ ├── f1.txt └── kept.txt 文件中列出的其他文件和目录,如何使用shell命令执行此操作,越简单越好。

e.g。

目录如下:

kept.txt

$ more kept.txt b kept.txt 的内容是:

a/

对于这种情况:

  1. 我想删除c/f1.txtc/。对于kept.txt,目录本身和所有子内容(文件和目录)将被删除。
  2. <%= DateTime.Now %> 中,格式是每行一个项目(文件或目录)。

2 个答案:

答案 0 :(得分:3)

使用extglob即可:

cd temp
shopt -s extglob

rm -rf !($(printf "%s|" $(<kept.txt)))

printf "%s|" $(<kept.txt)将提供b|kept.txt|输出,!(...)extended glob pattern以取消匹配。

答案 1 :(得分:1)

将所有内容移至临时文件夹。移回.txt中列出的文件/目录。然后,最后,删除临时文件夹。