我有一个包含许多文件和子目录的目录(~/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/
对于这种情况:
c/
,f1.txt
和c/
。对于kept.txt
,目录本身和所有子内容(文件和目录)将被删除。<%= DateTime.Now %>
中,格式是每行一个项目(文件或目录)。答案 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中列出的文件/目录。然后,最后,删除临时文件夹。