将文件内容传递给extglob命令终端

时间:2016-04-03 10:36:33

标签: macos bash shell unix terminal

我有一个我不想从某个位置删除的文件列表,我发现通过使用extglob,我可以使用以下方法保留预定义的文件列表:

rm -r !(one.txt|Folder)

这将删除除one.txt和文件夹Folder之外的所有内容,但是我要保留的文件列表并不总是相同。

有没有办法从文件传递文件/文件夹列表,例如whitelist.txt哪个不被删除?

我已设法重新格式化whitelist.txt以获取内容:

one.txt|two.txt|Folder

但是我不确定如何将其传递给命令

请注意我正在运行OSX 10.11。

谢谢,

2 个答案:

答案 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))