合併症
以下は時々しか機能しません:
gzip -d `cat large_file_list`
3つの問題があります(bash他のほとんどのBourneのようなシェルで):
ファイル名にスペースタブまたは改行文字が含まれている場合は失敗します($IFS変更されていないと想定)。これは、シェルの単語分割のためです。
また、ファイル名にglob-active文字が含まれていると、失敗する可能性があります。これは、シェルがファイル名リストにパス名展開を適用するためです。
ファイル名がで始まる場合-(POSIXLY_CORRECT=1最初のファイルにのみ適用される場合)、またはファイル名がの場合も失敗します-。
ファイル名が多すぎて1つのコマンドラインに収まらない場合も失敗します。
以下のコードには、上記のコードと同じ問題があります(4番目を除く)。
for file in `cat large_file_list`
do
gzip -d $file
done
信頼できるソリューション
あなたの場合はlarge_file_list行ごとに1つのファイル名を持つ、と呼ばれるファイルは、-それらの間ではなく、あなたがGNUシステムにしている場合、使用します。
xargs -rd'\n' gzip -d -- <large_file_list
-d'\n'xargs入力の各行を個別のファイル名として扱うように指示します。
-rxargs入力ファイルが空の場合、コマンドを実行しないように指示します。
--告げるgzip彼らが起動しても、次の引数がオプションとして扱われていないこと-。-それだけでは-、呼び出されたファイルの代わりとして扱われ-ます。
xargs各コマンドラインに多くのファイル名を付けますが、コマンドラインの制限を超えるほど多くはありません。これにより、gzipプロセスを開始しなければならない回数が減るため、これが高速になります。また、安全です。ファイル名も単語分割やパス名拡張から保護されます。
gzip、システムでの起動にかかる時間、ファイルリスト内のファイル数、およびそれらのファイルのサイズによって異なります。