我有一个我不想从某个位置删除的文件列表,我发现通过使用extglob,我可以使用以下方法保留预定义的文件列表:
rm -r !(one.txt|Folder)
这将删除除one.txt
和文件夹Folder
之外的所有内容,但是我要保留的文件列表并不总是相同。
有没有办法从文件传递文件/文件夹列表,例如whitelist.txt
哪个不被删除?
我已设法重新格式化whitelist.txt
以获取内容:
one.txt|two.txt|Folder
但是我不确定如何将其传递给命令
请注意我正在运行OSX 10.11。
谢谢,
答案 0 :(得分:0)
您可以使用GLOBIGNORE
进行一些技巧:
GLOBIGNORE="$(tr '\n' ':' <file.txt)"
假设file.txt
包含由换行符分隔的文件名。当然不要忘记将file.txt
添加到自身。
|
分隔名称:
GLOBIGNORE="$(tr '|' ':' <file.txt)"
现在你可以做到:
rm *
将删除除file.txt
中提到的文件以外的所有文件。
答案 1 :(得分:0)
由于路径名扩展发生在命令替换之后,您可以将两者结合起来:
shopt -s extglob
rm !($(< whitelist.txt))