我有一个~/temp/包含许多文件和子目录的目录(),在某些目录中,它们可能包含其他文件和子目录.另外,在目录(~/temp/)中,它包含一个带有名称的特殊txt文件kept.txt,它列出了一些包含在其中的直接文件和子目录~/temp/,现在我要删除文件~/temp/中未列出的所有其他文件和目录kept.txt,如何使用shell命令执行此操作,越简单越好.
例如
目录如下:
$ tree temp/ -F
temp/
??? a/
??? b/
??? c/
? ??? f2.txt
? ??? z/
??? f1.txt
??? kept.txt
Run Code Online (Sandbox Code Playgroud)
内容kept.txt是:
$ more kept.txt
b
kept.txt
Run Code Online (Sandbox Code Playgroud)
对于这种情况:
a/,c/和f1.txt.因为c/,目录本身和所有子内容(文件和目录)将被删除.kept.txt,格式是每行一个项目(文件或目录).使用extglob你可以这样做:
cd temp
shopt -s extglob
rm -rf !($(printf "%s|" $(<kept.txt)))
Run Code Online (Sandbox Code Playgroud)
printf "%s|" $(<kept.txt)将提供输出 asb|kept.txt|和!(...)是一个扩展的全局模式来否定匹配。
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |