すべての sed がスペースや数字などの perl のようなプレース ホルダーをサポートしているわけではありません。正確なケースをテストする方法はありませんが、以下は良いガイドになるはずです。
find -predicate -predicate ....
また、デフォルトでANDされることに注意してください。作業を行うには-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'
これは、私の検索が -level もサポートしていないことを示しています。
編集により、周囲の余分な"
文字が削除されました\(....\)
。
また
ksh93 を使用している場合は、次のような変数修飾子を使用できる可能性があります。
${FILE_NAME// / -o -name}
ただし、開始部分を連結するか-name
、保存された FILE_NAME の値に対して 2 番目の置換を行う必要があります。
次のコマンドを発行すると、ksh93 があるかどうかを確認できます。
echo ${.sh.version}
値が得られれば、ksh93 を持っています。
IHTH