2

我有一个 shell 脚本,可以解压缩一堆文件,然后处理这些文件,然后将它们重新压缩。我想等待处理,直到所有文件都完成解压缩。我知道如何为一个文件执行此操作:

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

我假设是因为有超过 1 个结果。那么如何对多个文件执行此操作?

4

2 回答 2

2

您可以在 shell 中执行子命令并检查是否有输出:

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而不是ls使用通配符,即;find -maxdepth 1 -name "*\.gz"

于 2012-05-14T16:17:26.047 回答
0

xargs如果while不被胁迫,是你的朋友。

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