/usr/bin/find: for 循环 bash 脚本中的参数列表太长

/usr/bin/find: Argument list too long in for loop bash script

我有这样一个bash脚本。我想gzip一个目录下的所有.ppm个文件到另一个目录下。为此我写了这样一个bash脚本:

cd /export/students/sait/12-may
for next_file in  $(find . -type f  ! -name *.ppm )
do
/bin/gzip -f -c $next_file > /export/students/sait/12-may-yedek/$next_file.gz
done

当我执行这个脚本时,我得到这样的错误:

/usr/bin/find: Argument list too long

我该如何解决这个问题?

引用此部分:*.ppm 以防止文件名通配,同时删除 !,因为您要查找具有 .ppm 扩展名的文件,而不是相反。

find . -type f  -name '*.ppm'


您可以使用单个 find 命令来代替 运行 循环,这将提供白色 space 安全性:

find /export/students/sait/12-may -type f -name '*.ppm' -exec sh -c '/bin/gzip -f -c "[=11=]" > "[=11=]".gz' {} \;