【问题标题】:Wait for all files with a certain extension to stop existing等待具有特定扩展名的所有文件停止存在
【发布时间】:2012-05-22 03:44:06
【问题描述】:

我有一个 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 个。那么如何对多个文件执行此操作?

【问题讨论】:

    标签: linux shell while-loop file-exists


    【解决方案1】:

    您可以在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"

    【讨论】:

      【解决方案2】:

      xargs 是你的朋友,如果 while 没有被强制。

      ls /homes/ndeklein/mzml/*.gz | xargs -I {} gunzip {}
      

      【讨论】:

        猜你喜欢
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-26
        相关资源
        最近更新 更多