2016-05-15 2 views
1

私はこのようなbashスクリプトを持っています。私はgzipすべて.ppmのファイルを別のディレクトリに置いて欲しい。このような理由から、私は、このようなbashスクリプトを書いた:/usr/bin/find:引数リストがforループ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 

はどうすればこの問題を解決することができますか?

+0

何らかの理由であなたはバッシュ[参照、ループする必要がある場合空白を含むファイルの一覧を表示](http://stackoverflow.com/a/7039579/3076724)。すなわち 'find .... -print0 |一方、IFS = read -r -d $ '\ 0'ファイル。 echo "$ file"; done' – BroSlow

答えて

6

ファイル名のグロビングを防止するために*.ppmを引用し、を削除して、.ppm拡張子のファイルを探したい場合は、それ以外の方法ではありません。

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


代わりに空白の安全性を提供するあなたは、単一の findのコマンドでそれを行うことができ、ループを実行するので:反復:

find /export/students/sait/12-may -type f -name '*.ppm' -exec sh -c '/bin/gzip -f -c "$0" > "$0".gz' {} \; 
+0

ありがとうございました。しかし、現時点では、.ppmの拡張子を持たない他のファイルを取得します。 – yusuf

+0

@yusuf:ロジックを逆転させるのに '! 'を使っていました。 – Jahid

+0

ありがとうございます。それは働いている。 – yusuf

関連する問題