0

次の 3 つの動的な値に基づいてファイルを一覧表示するには、bash スクリプトでどの構文を使用する必要がありますか?

FILEAGE=7
FILEDIR='"/home/ecom/tmp"'
FILESTRING='"search-results-*"'
FILES_FOR_REMOVAL=$("/usr/bin/find "${FILEDIR}" -maxdepth 1 -type f -mtime +${FILEAGE} -name "${FILESTRING}" -exec ls -lth {} \;")
echo ${FILES_FOR_REMOVAL}

上記を試してみると、次のようになります。

-bash: /usr/bin/find "/home/ecom/tmp" -maxdepth 1 -type f -mtime +7 -name "search-results-*" -exec ls -lth {} \;: No such file or directory
4

4 に答える 4

1

(コメントは付けられませんが…)

スペースを含むファイル名を確実に処理するには、変数の代わりに一時テキスト ファイルにファイル リストを保存し、(for の代わりに) while コンストラクトを使用してループすることを検討してください。

例えば:

FILEAGE=7
FILEDIR='/home/ecom/tmp'
FILESTRING='search-results-*'

TEMPFILE=".temp${RANDOM}"
CMD="find \"${FILEDIR}\" -maxdepth 1 -type f -mtime +${FILEAGE} -name \"${FILESTRING}\" -exec /bin/ls -lth '{}' \;"

$CMD > $TEMPFILE # write output to file
while read thefile; do
    do_somthing_to $thefile
done < $TEMPFILE

rm $TEMPFILE # clean up after

または、リストを 1 回だけ使用する場合は、出力を while コンストラクトに直接パイプします。

$CMD | while read thefile; do
    do_something_to $thefile
done
于 2009-06-02T12:28:53.243 に答える