Düzenli ifadeler kullanarak dosyaları TAR arşivinden nasıl dışlayabilirim?


10

Basit bir sorum var, ancak cevabı bulamıyorum veya çözemiyorum. Bir tar arşivi yapmak istiyorum, ancak bazı ifadeleri normal ifadeyi kullanarak dışarıda bırakmak istiyorum.

Dışlanacak dosya örneği şudur: 68x640X480.jpg

Şanssız denedim:

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

Birisi yardım edebilir mi?

Yanıtlar:


11

Sen gibi bazı ek araçları kullanabilir findve egrep:

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

Yukarıda belirtilen yöntemin dezavantajı, olası tüm dosya adları için çalışmayacak olmasıdır. Başka bir fırsat, aşağıdakilerin yerleşik hariç tutma işlevini kullanmaktır tar:

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

Ne yazık ki ikinci yöntem düzenli ifadelerle değil, sadece joker karakterlerle çalışır.


Teşekkürler, aradığım şey bu. Hangi dosya adlarının işe yaramayacağını lütfen not edebilir misiniz? örneğin hangi karakterleri içeriyor?
Frodik

Bu konuda fazla endişelenmemelisiniz - çoğu dosya adı bu çözümle mükemmel çalışır. Sorun şu ki, UNIX / Linux dosya adları hemen hemen her şeyi içerebilir, hatta karakterleri kontrol edebilir - bu tür belirsiz kombinasyonlar ilk çözümle çalışmayacaktır.
Vladimir Blaskov

UNIX / Linux / POSIX dosya adları ile ilgili güzel bir okuma: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov

0

Belki cpio'yu denemelisin

http://cybertiggyr.com/cpio-howto

Dosya listesinden okur ve arşivlemeyi yapar. Aşağıdaki gibi sed kullanarak bir dosya listesi oluşturabilirsiniz .

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

Daha sonra cpio'ya giriş olarak kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.