2016-11-01 14 views
0

私はbashスクリプトを持っています。ディレクトリのリストを調べるディレクトリがあり、zipファイルがあるディレクトリにはzipファイル名が変数にバインドされ、それからこのdirの別の場所に行きます。残念ながら、ディレクトリごとに1つのzipファイルがある場合に動作します。 - 多くの場合、それはbash dirのzipファイルのリストを取得し、それぞれの操作を実行します

スクリプト「バイナリオペレータが期待される」エラーを与える:

if [ -e $currdir/*.zip ]; then 
     for file in $currdir/*.zip; do 
      echo the zip is "${file##*/}" 
     done 

を、私はそれに応じてスクリプトを手直しするのに役立ちます。

[ -e * ] 

になるだろう:

+0

は' '.zip'で終わるすべてのファイルに展開されます。たぶんループを試してみませんか? – 123

+0

コード例がありますか? –

答えて

0

使用

for file in "$currdir"/*.zip; do 
    [ -e "$file" ] || continue 
    echo the zip is "${file##*/}" 
done 

としてはグロブはシェルに起こるのだろうコメントで指摘し、その後、[はすなわち、出力と呼ばれる

[ -e Desktop Documents Downloads ... ] 

したがって、展開とチェックインを繰り返しても問題はありません。

ご覧ください。http://mywiki.wooledge.org/WordSplittinghttp://wiki.bash-hackers.org/syntax/expansion/globs

+0

'-e'はすでにglob内でマッチしているので、' -e'はかなり冗長です。 – 123

+0

@ 123 globがマッチしない場合は、文字通り展開されます。つまり 'echo this_will_not_match_ *'は 'this_will_not_match_ * '。シェルオプション 'nullglob'がセットされていない限り。 – andlrc

1

場合必要な正確にあなたが使用できるかをチェック:

:ちょうど* .zip拡張子を含むファイルを超えるループ

if [[ -n $(echo "$currdir"/*.zip) ]]; then 
    for f in "$currdir"/*.zip; do 
    echo "Processing $f file.."; 
    done 
fi 

しかし、私は好みます

for f in "$currdir"/*.zip; do 
    echo "Processing $f file.."; 
done 
0

私はcase構成があまりにも頻繁に見落とされると思います。

case *.jpg in *.jpg) echo found files ;; *) echo no files found ;; esac 

zipからjpgから両方の参照1000 + JPGのみ;-)

変更と私のディレクトリに正しいメッセージを生成し、それはあなたのために働くかどうかを確認します。単一のファイル、 `$のcurrdir/*を。zip`チェック-e`

IHTH

関連する問題