web-dev-qa-db-ja.com

tar-特定のファイルを除外する

.jpg、.bmp、.gif、またはpngで終わらないディレクトリとそのサブディレクトリ内のすべてのファイルをtarしたいと思います。

したがって、次のフォルダとファイルが与えられます。

foo/file.txt
foo/file.gif
foo/bar/file
foo/bar/image.jpg

ファイルfile.txtおよびfileのみをtarします。 file.gifとimage.jpgは無視する必要があります。フォルダ構造も維持したいです。

私が最初に考えたのは、findコマンドの結果をgrep -v ".jpg | .gif | .bmp.png"と組み合わせてテキストファイルにパイプし、次にtarinclude引数を使用してそのファイルのリストをフィードすることでした。

ただし、grepped findコマンドの結果にはディレクトリも含まれ(上記の例では「foo」と「foo/bar」になります)、ディレクトリがtarに送られると、そのディレクトリ内のすべてのファイルが含まれるため、最終的には、必要なファイルではなく、すべてのファイルを含むtarファイルになります。

Findがディレクトリを出力しないようにする方法はありますか?これにアプローチするはるかに簡単な方法はありますか?

4
Alan

使用する --exclude=patternオプション:

tar --exclude='*.jpg' --exclude='*.png' --exclude='*.bmp' --exclude='*.gif' -cvf tar-filename.tar folder
10