#!/bin/bash
unset result
result=$(find /home -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"
この/test
セクションでは、実際には2つのファイル名を見つける必要があります。で始まるものE*
から始まるものP_*
。これは可能ですか?
答え1
~から人々が見つけた
終了ステータス
探すすべてのファイルが正常に処理された場合は状態0で終了し、エラーが発生した場合は0より大きい状態で終了します。これは意図的に非常に広範な説明ですが、戻り値がゼロでない場合は、結果の精度に依存しないでください。探す
したがって、一致するファイルが存在しない場合、終了ステータスはゼロのままです。したがって、出力が空であることを確認することをお勧めします。
unset result
result=$(find ~/TestDir -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"
答え2
find $(find -name "[0-9][0-9][0-9][0-9]") -name "[test]*" -mtime -7 -exec rm -i {} \; || echo "There are no recovery files older than 7 days"
これ||
(または)演算子は左側のコマンドの結果を表示し、左側のコマンドが失敗した場合にのみ(戻りコードに基づいて)右側のコマンドを実行します。
findが一致するファイルを見つけられない場合は、1を返し、||
runがコマンドを実行しますecho
。