Bagaimana cara mengecualikan file dari arsip TAR menggunakan ekspresi reguler?

10

Saya punya pertanyaan sederhana, namun saya tidak dapat menemukan atau menyelesaikan jawabannya. Saya ingin membuat arsip tar, tetapi saya ingin mengecualikan beberapa file dari itu menggunakan ekspresi reguler.

Contoh file yang dikecualikan adalah ini: 68x640X480.jpg

Saya sudah mencoba ini tanpa hasil:

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

Adakah yang bisa membantu?

Frodik
sumber

Jawaban:

11

Anda dapat menggunakan beberapa alat tambahan seperti finddan egrep:

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

Kelemahan dari metode yang disebutkan di atas adalah tidak akan bekerja untuk semua nama file yang mungkin. Peluang lain adalah menggunakan fungsionalitas pengecualian bawaan tar:

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

Sayangnya metode kedua tidak bekerja dengan ekspresi reguler, tetapi hanya dengan wildcard.

Vladimir Blaskov
sumber
Terima kasih, ini yang saya cari. Bisakah Anda membuat catatan tentang nama file apa yang tidak berfungsi? misal berisi karakter apa?
Frodik
Anda tidak perlu terlalu khawatir tentang hal itu - sebagian besar nama file berfungsi dengan baik dengan solusi itu. Masalahnya adalah bahwa nama file UNIX / Linux dapat mencakup hampir semua, bahkan mengontrol karakter - kombinasi yang tidak jelas seperti itu tidak akan berfungsi dengan solusi pertama.
Vladimir Blaskov
Bacaan yang bagus terkait dengan nama file UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov
0

Mungkin Anda harus mencoba cpio

http://cybertiggyr.com/cpio-howto

Bunyinya dari daftar file dan melakukan pengarsipan. Anda dapat membuat daftar file menggunakan sed seperti yang diberikan di bawah ini.

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

Anda kemudian dapat menggunakannya sebagai input ke cpio.

nitin
sumber