2

一連のファイルを解凍し、ファイルを処理してから再度圧縮するシェル スクリプトがあります。すべてのファイルの解凍が完了するまで処理を待ちたいと思います。私は1つのファイルに対してそれを行う方法を知っています:

while [ -s /homes/ndeklein/mzml/JG-C2-1.mzML.gz ]
do
  echo "test"
  sleep 10
done   

しかし、私がするとき

while [ -s /homes/ndeklein/mzml/*.gz ]

次のエラーが表示されます。

./test.sh: line 2: [: too many arguments

複数の結果があるためだと思います。では、複数のファイルに対してこれを行うにはどうすればよいですか?

4

2 に答える 2

2

シェルでサブコマンドを実行し、出力があることを確認できます。

while [ -n "$(ls /homes/ndeklein/mzml/*.gz 2> /dev/null)" ]; do
    # your code goes here
    sleep 1; # generally a good idea to sleep at end of while loops in bash
done

ディレクトリに何千ものファイルが含まれる可能性がある場合は、ワイルドカードのfind代わりに使用することを検討してください。lsfind -maxdepth 1 -name "*\.gz"

于 2012-05-14T16:17:26.047 に答える
0

xargswhile強要されなければあなたの友達です。

ls /homes/ndeklein/mzml/*.gz | xargs -I {} gunzip {}
于 2012-05-14T16:16:29.867 に答える