ディレクトリ内のすべての.gzを抽出して削除する-Linux


81

ディレクトリがあります。約500Kの.gzファイルがあります。

そのディレクトリ内のすべての.gzを抽出し、.gzファイルを削除するにはどうすればよいですか?


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

回答:


169

これはそれを行う必要があります:

gunzip *.gz

1
...それで「引数が大きすぎる」エラーが発生しない限り。その場合、find "$dir" -maxdepth 1 -name '*.gz' -print0 | xjobs -0 -l50 -v2 gunzipインスタンスをそれぞれ50個の引数に制限する(そしてそれらを並行して実行する)ようなものを使用する必要があります。
Toby Speight 2017

22

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

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

19

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

    # 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

他の方法もあると思いますが、これがおそらく最も簡単です。

そしてそれを削除するにrm -rf *.gzは、該当するディレクトリでを実行するだけです


3

現在のディレクトリとそのサブディレクトリにあるすべてのgzファイルを抽出します。

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

3

単一のファイルを抽出する場合は、次を使用します。

gunzip file.gz

ファイルを抽出し、.gzファイルを削除します。



0

試してみてください:

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

次に試してください:

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

これにより、現在のディレクトリ内のすべての.tar.gzファイルが解凍され、すべての.tar.gzファイルが削除されます。説明が必要な場合は、「|」その前のコマンドのstdoutを取得し、それをその後のコマンドのstdinとして使用します。引用符なしで「manコマンド」を使用して、これらのコマンドと引数が何をするかを理解します。または、オンラインで調査することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.