2016-08-07 10 views
2

私はBashの知識が不足しているので、私は些細な問題であなたに来ます。私は41のフォルダの「Apps」ディレクトリを持っています。各フォルダには、glue1.cssファイルを含むサブディレクトリcssがあります。私の目標は、bashのループを介してそのCSSファイルを削除することですが、私は2つのフォルダ:adglue-resourcesを免除する必要があります。複数の条件を持つBash if文

cssファイルがないので、adフォルダーを免除する必要があります。私は、実行時に発生してから、次のエラーを回避したい:

rm: ad/css/glue1.css: No such file or directory 

は、この仮想ディレクトリ(簡潔にするために41個のフォルダを欠く)考えてみましょう。

Apps 
    ad 
    css 
     (empty) 
    glue-resources 
    css 
     glue1.css (keep this file!) 
    profile 
    css 
     glue1.css (remove this file!) 
    ... 

をこれまでのところ、私が持っているコードです。親ディレクトリのパスがglue-resources/css/またはad/css/でない場合は、glue1.cssファイルのrmを呼び出す必要があります。

for dir in **/css/; do 
if [[ "${dir}" != 'glue-resources/css/' || "${dir}" != 'ad/css/' ]]; then 
    rm "${dir}"glue1.css 
fi 
done 

上記のコード結果は機能しません。私は同じ 'No such file or directory'エラーを表示し、glue-resources/cssのglue1.cssファイルが削除されました。なぜそれがうまくいかないのか分かりません。[[]]を使用すると、複数の条件を組み合わせることができます。

私は、bashで複数の条件がどのように動作するのか分かりません。以下のバージョンのコードが動作します。

for dir in **/css/; do 
if [[ "${dir}" != 'glue-resources/css/' ]]; then 
    rm "${dir}"glue1.css 
fi 
done 


for dir in **/css/; do 
if [[ "${dir}" != 'ad/css/' ]]; then 
    rm "${dir}"glue1.css 
fi 
done 

if文に複数の条件を追加しようとして失敗しました。

+0

[shellcheck](http://www.shellcheck.net)を試してみると、[この問題](https://github.com/koalaman/shellcheck/wiki/SC2055)が自動検出されます。 –

答えて

2

を:

[[ "${dir}" != 'glue-resources/css/' || "${dir}" != 'ad/css/' ]] 

私は何を疑います欲しいものは:

[[ "${dir}" != 'glue-resources/css/' && "${dir}" != 'ad/css/' ]] 

&&はlogica土地。両方の条件が同時に満たされることが必要です。

0

おそらく、あなたがループを回避し、このような何か行うことができます:||は論理和、以下の条件が常にtrueを返します表すので

find . -path ./glue-resources -prune -o -name glue1.css | xargs -I [] rm [] 
関連する問題