Jak wykluczyć pliki z archiwum TAR przy użyciu wyrażeń regularnych?

10

Mam proste pytanie, ale nie mogę znaleźć ani rozwiązać odpowiedzi. Chcę utworzyć archiwum tar, ale chcę wykluczyć z niego niektóre pliki przy użyciu wyrażeń regularnych.

Przykład pliku do wykluczenia jest następujący: 68x640X480.jpg

Próbowałem tego bez powodzenia:

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

Czy ktoś może pomóc?

Frodik
źródło

Odpowiedzi:

11

Można użyć kilka dodatkowych narzędzi, jak findi egrep:

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

Wadą wyżej wspomnianej metody jest to, że nie będzie działać dla wszystkich możliwych nazw plików. Inną możliwością jest skorzystanie z wbudowanej funkcji wykluczania tar:

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

Niestety druga metoda nie działa z wyrażeniami regularnymi, ale tylko z symbolami wieloznacznymi.

Vladimir Blaskov
źródło
Dzięki, tego szukałem. Czy możesz zanotować, które nazwy plików nie będą działać? np. zawierające jakie postacie?
Frodik
Nie powinieneś się tym zbytnio przejmować - większość nazw plików działa idealnie z tym rozwiązaniem. Problem polega na tym, że nazwy plików UNIX / Linux mogą zawierać prawie wszystko, nawet znaki kontrolne - takie niejasne kombinacje nie będą działać z pierwszym rozwiązaniem.
Vladimir Blaskov
Przyjemna lektura związana z nazwami plików UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Może powinieneś spróbować CPIO

http://cybertiggyr.com/cpio-howto

Czyta z listy plików i wykonuje archiwizację. Możesz wygenerować listę plików za pomocą sed, jak podano poniżej.

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

Następnie możesz użyć go jako danych wejściowych do cpio.

nitiny
źródło