【发布时间】:2019-01-11 01:41:11
【问题描述】:
我在使用 KSH88 时遇到问题
script="find . ! \( "$result" \) -mtime "$older" -xdev -type f -size +"$minsize"M -exec ls -lh {} \; | head -100 | awk '{print \$8}' | sort -rn"
files_to_delete=`$script`
当我回显我的 files_to_delete 变量时,我得到:
find . ! \( -name '*.jar' -o -name '*.zip' -o -name '*.rar' -o -name '*.log' -o -name '*.xml' \) -mtime 10 -xdev -type f -size +100M -exec ls -lh {} \; | head -100 | awk '{print $8}' | sort -rn
这是我想要的,当我在命令行上执行它时它可以工作,但是当我在我的 KSH 中执行它时,我得到了
find: bad option \(
find: [-H | -L] path-list predicate-list
【问题讨论】:
-
提示:不要使用变量!使用函数或数组来存储命令!
-
如何将其存储在数组或函数中?我有一个我的异常数组(*.jar *.zip...),但我不知道如何在函数中动态使用 -name 和 -o! P.S 我看了重复的链接,没看懂
-
请尝试将“eval”放在“$script”前面,这样它就变成了files_to_delete=`eval $script`我没有纯ksh88环境来尝试这个,但它确实在 bash 中有所作为。
-
为什么不用
'('替换\(? -
需要反斜杠转义,因为 find 需要将 ( 和 ) 作为参数。如果删除 \,shell 会尝试解释它。