sadece tar list dosyaları


16

Eğlenceli gerçek: Archive Manager kullanıyorsanız ve bir .tar.gz ayıklayın, böylece "Dizin yapısını koru" un işaretini kaldırırsanız , bir tarbomb elde edersiniz .

tar -ztftar dosyasındaki tüm dosyaları ve dizinleri listeler. Dizin yapısı olmadan bir tar dosyasındaki tüm dosyaları listelemenin bir yolu var mı ?


İle 'tarbomb' efekti elde edebilirsiniz tar xvzf my_tar.tar.gz --transform 's/.*\///'. Ancak maalesef bu, tyerine bir girişte görüntülenme şeklini değiştirmez x.
ire_and_curses

4
Beni rahatsız eden şey, iyi yapılandırılmış arşivlerin bile kitle çıkarma silahları oluşturmak için kolayca kullanılabilmesidir.
Eero Aaltonen

Yanıtlar:


17

Bunu man sayfasından yapmanın bir yolunu göremiyorum, ancak sonuçları her zaman filtreleyebilirsiniz. Aşağıdakiler dosya adlarınızda yeni satır olmadığını varsayar:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

Nasıl çalışır

Alan ayırıcısını olarak ayarlayarak, /son alan awkabout ( $NF) öğesinin bir dosya adını işliyorsa dosya adı olduğunu veya bir dizin adını tarişliyorsa boş olduğunu ( dizin adlarına bir eğik çizgi ekler ) bilir . Yani, temelde awkboş değilse son alanı yazdırmayı söylüyoruz .


Awk ile oldukça güzel iş :)
Eero Aaltonen 15:13

5

Joseph R. önerisi birini kullanarak normal ifadeler kullanabilirsiniz [^/]$için grephatlar ile biten değil bakarak dosyalar için /.

tar tzf archive.tar.gz | grep -e "[^/]$"


Bu hala foo/bartam tersine çıktı bar. Sen istemek grep -Eo '[^/]+$'(GNU grep ile birlikte).
Stéphane Chazelas

4

Dosya adlarının hiçbirinin yeni satır içermediği varsayılarak:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

İlk sed komutu /satırdaki sondan önceki her şeyi kaldırır , böylece yalnızca dosya adı kısmı yazdırılır. İkinci komut, şimdi boş olan satırları, yani a ile biten /, dizin olan satırları siler .


sed: -e ifade # 2, karakter 2: bilinmeyen komut: `/ 've sed sözdizimi pek hissetmiyor .. sezgisel
Eero Aaltonen

@EeroAaltonen sed komutunu düzelttim. Gerçekten, sözdizimi biraz şifreli (cevabıma açıklamalar ekliyorum).
Gilles 'SO- kötü olmayı kes

2

İle pax( tardosyaları okumak için POSIX komutu ):

pax -'s@.*/@@' < file.tar

(dizinler de dahil olmak üzere türlerine bakılmaksızın tüm dosyaları listeler).

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.