并非所有 seds 都支持类似 perl 的空格、数字等占位符。我没有办法测试您的确切情况,但以下应该是一个很好的指南。
另外,请注意find -predicate -predicate ....
默认情况下是 ANDed。要完成这项-o
工作,您必须将整个事情包裹在( (parens) )
AND 中,这样外壳就不会将括号视为启动子外壳的请求,您必须转义括号,即\( .... -o .... \)
. 所以这导致我们
set -vx; SRC_DIR="." ; FILE_NAMES="a b c"
find "${SRC_DIR}" \( $(echo "$FILE_NAMES"| sed 's/ / -o -name /g;s/^/-name /') \) -type f -mtime +14 -level 0
输出
+ echo 'a b c'
+ sed 's/ / -o -name /g;s/^/-name /'
+ find . '\( -name a -o -name b -o -name c \)' -type f -mtime +14 -level 0
find: invalid predicate `-level'
这只是表明我的 find 也不支持 -level 。
编辑删除"
了\(....\)
.
还
如果您使用的是 ksh93,则可以使用变量修饰符,例如
${FILE_NAME// / -o -name}
但是您需要仅连接开头-name
或对 FILE_NAME 的保存值进行第二次替换。
您可以通过发出以下 cmd 来查看您是否有 ksh93
echo ${.sh.version}
如果你得到一个值,那么你有 ksh93。
IHTH