2017-06-25 7 views
0

私のファイルが以下のいずれかのサブディレクトリに存在するかどうかを知りたい。サブディレクトリは上記のシェルスクリプトのステップで作成されていますが、以下のコードはファイルが存在しない場合でも常にそのファイルが存在しないことを示しています。Bash:指定されたファイルのないサブディレクトリを見つけよう

#!/bin/bash 
.... 

if ! [[ -e [ **/**/somefile.txt && -s **/**/somefile.txt ]]; then 
    echo "===> Warn: somefile.txt was not created in the following path: " 
    # I want to be able to print the path in which file is not generated 
    exit 1 
fi 

は、私は、ファイル名は、すべてのサブディレクトリに作成されるsomefile.txtですけど、サブディレクトリ名は、そのためグロブ...多くのことを変更します。

+1

最初の '**/somefile.txt'は、実際に存在する' somefile.txt'のコピーにのみ展開されます。 *存在しないものを見つけたい場合は、ディレクトリを繰り返し処理する必要があり、 'somefile.txt'をglob式に含めることはできません。 –

+1

第2に、glob式を '-e'や' -s'の引数として渡せません。これらのテスト式は、引数としての正確なパス名、または* single * filenameをとります。彼らは、グロブ、または複数のファイルのリスト(グロブは、いくつかのコンテキストでは、展開することができます)を取ることはありません。 –

+1

第3に、 'shopt -s extglob'を実行して' ** 'に特別な意味を持たせる必要があります。 (インタラクティブなシェルですぐに使えるのであれば、あなたのドットファイルの1つがおそらくあなたのために実行しているでしょう)。 –

答えて

4
#!/bin/bash 

shopt -s extglob ## enable **, which by default has no special behavior 

for d in **/; do 
    if ! [[ -s "$d/somefile.txt" ]]; then 
    echo "===> WARN: somefile.txt was not created (or is empty) in $d" >&2 
    exit 1 
    fi 
done 
+0

これは完璧です!ありがとうチャールズチャールズ。私は本当にこれの周りにいくつかのドキュメントがあったが、これは私が欲しかったものです。 – Pavanraotk

+1

http://wiki.bash-hackers.org/syntax/patternは、おそらくパターンマッチング(グッビング)に関するドキュメントの開始には良い場所です。 [BashFAQ#31](http://mywiki.wooledge.org/BashFAQ/031)では、 'test'、' ['と' [[[いくつかの深さでは]、http://wiki.bash-hackers.org/構文/ ccmd/conditional_expressionも同様に参考になります。ドキュメントを探すのに役立つ他のコンテンツはありますか? –

+0

FAQパス(既にブックマークに入っています)と構文パターンのリンクは私には大いに役立ちます。私は私がやっていることをもっとは望んでいないと思います。再度、感謝します! – Pavanraotk

関連する問題