作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个目录(~/temp/
)包含很多文件和子目录,在某些目录中,它们可能包含其他文件和子目录。此外,在目录(~/temp/
)中,它包含一个名为kept.txt
的特殊txt 文件,它列出了中包含的一些直接文件和子目录code>~/temp/
,现在我想删除 ~/temp/
下所有其他未在 kept.txt
文件中列出的文件和目录, 如何用 shell 命令做到这一点,越简单越好。
例如
目录如下:
$ tree temp/ -F
temp/
├── a/
├── b/
├── c/
│ ├── f2.txt
│ └── z/
├── f1.txt
└── kept.txt
kept.txt
的内容是:
$ more kept.txt
b
kept.txt
对于这种情况:
a/
、c/
和f1.txt
。对于c/
,目录本身和所有子内容(文件和目录)将被删除。kept.txt
中,格式是每行一个项目(文件或目录)。最佳答案
使用 extglob
你可以这样做:
cd temp
shopt -s extglob
rm -rf !($(printf "%s|" $(<kept.txt)))
printf "%s|" $(<kept.txt)
将提供输出为 b|kept.txt|
和 !(...)
是一个 extended glob pattern否定匹配。
关于bash - shell 脚本 : How to delete all files in a directory except ones listed in a file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32348666/
我是一名优秀的程序员,十分优秀!