2013-04-16 13 views
61

私はディレクトリを持っています。約500Kgの.gzファイルがあります。ディレクトリ内のすべての.gzを抽出して削除する - Linux

どのようにして.gzをそのディレクトリに展開し、.gzファイルを削除できますか?

+0

'.gz'ファイルは必ずしもアーカイブである必要はありません。その場合、 'gzip -d file.gz'を実行すると削除するものはありません。 – devnull

+0

http://unix.stackexchange.com/ –

答えて

1
for foo in *.gz 
do 
    tar xf "$foo" 
    rm "$foo" 
done 
14

明らかにこれを行う方法は複数あります。

# This will find files recursively (you can limit it by using some 'find' parameters. 
    # see the man pages 
    # Final backslash required for exec example to work 
    find . -name '*.gz' -exec gunzip '{}' \; 

    # This will do it only in the current directory 
    for a in *.gz; do gunzip $a; done 

他の方法もありますが、これはおそらく最も簡単です。

そして、ちょうど該当するディレクトリに

129

rm -rf *.gzを行う。これは、それを行う必要があり、それを削除するには:

gunzip *.gz 
+1

に属しているので、この質問を議論の対象外とすることに投票しています...それがあなたに「あまりにも大きい」エラーを与えない限り。この場合、 'find '$ dir" -maxdepth 1 -name' * .gz 'のようなものを使いたいでしょう。-print0 | xjobs -0 -l50 -v2 gunzip'を実行してインスタンスをそれぞれ50個の引数に制限します(並行して実行する)。 –

2

エキスを現在のディレクトリとそのサブディレクトリ内のすべてのGZファイル:

find . -name "*.gz" | xargs gunzip 
14

@techedemicは正しいが、 '。'がありません。現在のディレクトリに言及すると、このコマンドはすべてのサブディレクトリを通過します。

find . -name '*.gz' -exec gunzip '{}' \; 
0

試してみてください。

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 tar xvfz 

が次に試してみてください。

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 rm 

これは、現在のディレクトリ内のすべての.tar.gzファイルをuntarすると、すべての.tar.gzファイルを削除します。説明が必要な場合は、 "|"その前にコマンドの標準出力を取り、それをコマンドの標準入力として使用します。 "man コマンド"を使用して、これらのコマンドと引数が何をするかを把握してください。あるいは、オンラインで研究することができます。

3

あなたは、単一のファイルの使用を抽出したい場合は:それは、ファイルを抽出し、.gzのファイルを削除します

file.gz

gunzipを。

+0

このスレッドからの重複の回答:https://stackoverflow.com/a/20103343/1847249 –

関連する問題