Hepsi mevcut olmayan dosyaların listesini tar


10

Gibi bir komut dosyasından bir komut çalıştırıyorum

tar -c -f ar.tar a b c d

burada b, c ve d bulunmayabilir ve dizinler olabilir. Çözümler Ben bu iş parçacığı çıktısının olan ile gelip ls -detmek grep, sonra içine eklenerek birleştirilmesi tarkomutu veya uzatılmış Neználkovo açma @(a|b|c|d).

Bunu yapmanın daha temiz bir yolu var mı? Bir --includeparametresi yok gibi görünen Debian Wheezy'dayım .


Eğer var mı --ignore-failed-readseçeneği?
Costas

1
Denedim, var olmayan dosyalar için hala bir hata verdi.
gidyn

1
Evet, hata mesajı var ancak arşiv oluşturuldu.
Costas

Yanıtlar:


8

deneyebilirsin

 tar cf ar.tar $(ls a b c d )

nerede

  • c oluşturmak için
  • f ar.tar tar dosyasını belirtin

  • $(ls a b c d) hangi dosyanın gerçekte mevcut olduğunu listeleyecektir (ve diğeri için hata verecektir)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)mükemmel çalışıyor .. ama bence extglob ile temiz
gidyn

Şimdi senaryoyu çizgi extglob
haline getiriyorum

1

Tar arşivindeki dosyaların tam yolunu bulmanız uygunsa şunları yapabilirsiniz:

tar -c -f ar.tar $(readlink -e a b c d)

-eReadlink seçeneği mevcut dosya standartlaştırmanız ve sessizce herhangi diğerlerini göz ardı eder.


Sanırım --strip-componentsçıkarırken bu işe yarayabilir .
gidyn

0

kullanım

find path/to/dir -name "*.ext1" -o -name "*.ext2"

açıklama

  1. İlk parametre aramak istediğiniz dizindir.
  2. Varsayılan olarak findözyineleme yapar.
  3. -oAçılımı -or. Yani yukarıda bu joker karakteri VEYA bunu arayın. Sadece bir desene sahipseniz, buna gerek yok -o.
  4. Joker karakter deseninin tırnak işaretleri gereklidir.
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.