forループからファイル名を読み取るには、findコマンドを実行するのに役立ちます。

forループからファイル名を読み取るには、findコマンドを実行するのに役立ちます。

コンテンツ/tmp/fefile

amx/eng/prf.amx
amx/eng/det.amx
bmb/menu.bmb
bmx/eng/menu.bmx
dll/tlnt.dll
dlx/eng/dlx
for file in `cat /tmp/fefile`
do
    if [ -f $file ]
    then
        echo "File '${file}' found in $(pwd) path."
        echo " Now i need to check if the  that file modified in last 10 mins with the below find command "
        find . -mmin -10 -type f -name ${file} -regextype posix-egrep -regex ".*/(dir1|dir1|dir3|dir4)/.+" -printf "%P\n" > /tmp/base
        echo "The files that are modified recently are below"
        File=(cat /tmp/base)

        echo " now i am verifying that $file is matched with $File "
        if[ $file == $File ]
        then
            echo " tmp file matched with base file."
        else
            echo " file doesn't match"
        fi # Originally missing
    else
        echo "File '{file} not found."
    fi
done

findコマンドで上記のスクリプトを変更してファイル名を読み、過去10分間変更されたことを確認します。

ファイルが変更されたら、2つのファイルが一致していることを確認してください。

ベストアンサー1

内部に探す使用するコマンド正規表現。この正規表現は、リストされたファイル名を調べます。フェイペイファイルがありますが、この正規表現に一致するものはありません。注:ファイル内ではなくファイル名自体を確認してください。

find . -mmin -10 -type f -name ${file} -regextype posix-egrep -regex ".*/(dir1|dir1|dir3|dir4)/.+" -printf "%P\n" > /tmp/base

それらのどれもありません:

  • anything in any amount追加する
  • dir1またはdir1(再び?!おそらくdir2)または dir3またはdir4プラス
  • anything in any amount but at least one

もう一つの問題は正規表現そのものです。

".*/(dir1|dir1|dir3|dir4)/.+"

おそらく次のようになります。

".*\/(dir1|dir2|dir3|dir4)\/.+"

/次のようにエスケープを使用する必要があります\\/

返品:

File=(cat /tmp/base)

しなければならない:

File=$(cat /tmp/base)

または

File=`cat /tmp/base`

もう一つのポイントは行末ですfind

(...) -printf "%P\n" > /tmp/base

>を>>に変更することをお勧めします。

(...) -printf "%P\n" >> /tmp/base

それ以外の場合は、1つを除いて見つかったすべてのファイルを上書きします。

おすすめ記事