katran - C joker dosya deseni ile


17

Dizinleri değiştirmek ve joker karakter dosya deseni kullanmak için tar komutunu kullanabilir miyim?

İşte yapmaya çalıştığım şey:

tar -cf example.tar -C /path/to/file *.xml

Dizin (-C) değiştirmezseniz çalışır, ancak tar dosyasında mutlak yollardan kaçınmaya çalışıyorum.

tar -cf example.tar /path/to/file/*.xml

İşte yaptığım diğer bazı girişimler:

tar -cf example.tar -C /path/to/file *.xml
tar -cf example.tar -C /path/to/file/ *.xml
tar -cf example.tar -C /path/to/file/ ./*.xml
tar -cf example.tar -C /path/to/file "*.xml"

Ve bu ben aldım hata:

tar: *.xml: Cannot stat: No such file or directory

Ben bu işi (find, xargs, vb kullanarak) yapmak için başka yollar olduğunu biliyorum ama bunu sadece tar komutu ile yapmayı umuyordum.

Herhangi bir fikir?

Yanıtlar:


18

Sorun, * .xml katran tarafından değil kabuk tarafından yorumlanır. Bu nedenle bulduğu xml dosyaları (varsa) tar komutunu çalıştırdığınız dizinde bulunur.

İstediğiniz dosyaları seçmek ve sonra bunları katlamak için çok aşamalı bir işlem (belki de borular dahil) kullanmanız gerekir.

En kolay yol sadece cddosyaların olduğu dizine gitmek olacaktır :

$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)

çalışmalı.

Köşeli parantezler komutları birlikte gruplandırır, böylece işiniz bittiğinde orijinal dizininizde kalırsınız. &&, tariradenin yalnızca ilkinin cdbaşarılı olması durumunda çalışacağı anlamına gelir .


9

Girişimlerinizden birinde:

tar -cf example.tar -C /path/to/file "*.xml"

* karakteri gerçekten de katrana aktarılır. Ancak sorun tar'ın yalnızca bir arşivin üyelerinin adlarında joker karakter eşleşmesini desteklemesidir. Dolayısıyla, bir arşivden üye çıkarırken veya listelerken joker karakterler kullanabilmenize rağmen, bir arşiv oluştururken joker karakterler kullanamazsınız.

Bu gibi durumlarda genellikle bulmak için başvuruyorum (daha önce de belirttiğin gibi). GNU bulmanız varsa, -printf seçeneğini kullanarak yalnızca göreli yolu yazdırmak için güzel bir seçeneği vardır:

find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
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.