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

我有一个包含许多文件和子目录的目录(〜/ temp /),在某些目录中,它们可能包含其他文件和子目录.
另外,在目录(〜/ temp /)中,它包含一个名为keeps.txt的特殊txt文件,它列出了〜/ temp /中包含的一些直接文件和子目录,现在我要删除所有其他文件和目录在〜/ temp /下未在keep.txt文件中列出,如何使用shell命令执行此操作,越简单越好.

例如

目录如下:

$tree temp/ -F
temp/
 ├── a/
 ├── b/
 ├── c/
 │   ├── f2.txt
 │   └── z/
 ├── f1.txt
 └── kept.txt

keep.txt的内容是:

$more kept.txt
b
kept.txt

对于这种情况:

>我想删除/,c /和f1.txt.对于c /,将删除目录本身和所有子内容(文件和目录).
>在keep.txt中,格式是每行一个项目(文件或目录).

最佳答案
使用extglob你可以这样做:

cd temp
shopt -s extglob

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

printf“%s |” $(< keeps.txt)将提供输出为b | keeps.txt |和!(...)是一个extended glob pattern否定比赛.

转载注明原文:bash – Shell脚本:如何删除目录中除文件中列出的文件以外的所有文件? - 代码日志