正規表現を使用してTARアーカイブからファイルを除外する方法


10

簡単な質問がありますが、答えを見つけることも解くこともできません。tarアーカイブを作成したいのですが、正規表現を使用していくつかのファイルをアーカイブから除外したいと考えています。

除外するファイルの例は次のとおりです。 68x640X480.jpg

私は運なしでこれを試しました:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

誰か助けてもらえますか?

回答:


11

findandなどの追加ツールを使用できますegrep

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

上記の方法の欠点は、すべての可能なファイル名に対して機能しないことです。もう1つの機会は、組み込みの除外機能を使用することですtar

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

残念ながら、2番目の方法は正規表現では機能せず、ワイルドカードでのみ機能します。


ありがとう、これは私が探していたものです。機能しないファイル名をメモしてください。たとえば、どのような文字が含まれていますか?
Frodik、2011年

あなたはそれについてあまり心配する必要はありません-ほとんどのファイル名はそのソリューションで完全にうまく機能します。問題は、UNIX / Linuxファイル名に制御文字を含めてほとんどすべてが含まれる可能性があることです。このようなあいまいな組み合わせは、最初のソリューションでは機能しません。
Vladimir Blaskov、2011年

UNIX / Linux / POSIXファイル名に関連する素晴らしい読み物:dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov

0

多分あなたはcpioを試すべきです

http://cybertiggyr.com/cpio-howto

ファイルリストから読み込んでアーカイブを行います。以下のようにsedを使用してファイルリストを生成できます。

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

その後、それをcpioへの入力として使用できます。

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