【发布时间】:2017-07-05 09:10:16
【问题描述】:
我正在从包含应该删除的文件和文件夹的黑名单文件中读取字符串。它适用于简单的文件名,但不适用于通配符。
例如如果我在 shell 上键入 rm -rf !(abc|def),它会删除除这两个文件之外的所有文件。将此字符串 !(abc|def) 放入黑名单时不起作用,因为该字符串未得到评估。
所以我尝试使用eval,但它没有按预期工作。
#!/bin/bash
# test pattern (normally read from blacklist file)
LINE="!(abc|def)"
# output string
echo "$LINE"
# try to expand this wildcards
eval "ls $LINE"
# try with subshell
( ls $LINE )
我怎样才能使它工作?
【问题讨论】:
-
`我正在从黑名单文件中读取字符串`:如何?您的代码没有显示这部分。
-
你最好将 find 与 -regex 和 -delete 一起使用。
-
sjsam,我没有展示这部分,因为它与我的问题无关。我准备了一个精简的脚本,以便更容易重现问题。