"Ls" eşleşen desende bir dizini hariç tut


13

İçinde dosyaları olan lsdirs çalışıyorum .png(özyinelemeye gerek yok, ama çok yararlı olurdu), exept biri. Bir dizin hariç yani

ls */*.png

iyi çalışıyor.

ls (^one)*/*.png

stdout döndürmez. Nasıl başarabilirim?

Körüm ve borularım espeak, bu yüzden şimdilik sadece stdout duyabiliyorum.


Hangi kabuğu kullanıyorsun? Deseniniz bir zsh desenine benziyor, ancak hariç tutmayacağı gibi yararlı bir desen olmasa da one(doğru desen olurdu ^one/*.png), her şeyi basar.
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


16

Seçenek 1 - sadece kullanma ls:
Genişletilmiş bash globbing açıkken ( shopt -s extglob) şunları yapabilirsiniz:

ls !(one*)/*.png


Seçenek 2 - Birleştirme lsve grep:

Birleştirebilirsiniz lsilegrep -v

  • Örneğin ls */*.png | grep -v "one/"


Seçenek 3 - (IMO en iyi) ama kullanımları finddeğil ls:

Tüm alt dizinleri tekrar tekrar aramak için find

find . -type f -name "*.png" -not -path "*/one/*"


Yukarıdaki tek satırların tümü, .pngherhangi bir yol eşleşmesini filtrelerken dosya içeren dizinleri listeleyecektir one/; bunu yalnızca Seçenek 3 tekrar tekrar yapar.


Does not findkomut söylemek gerek -path "*/one/*"yoksa -path "./one/*"?
G-Man

@ G-Man Kesinlikle haklısın. Yukarıda düzenlendi.
toxefa

Bu hala uyuşmuyor ./phone/handset.pngmu?
G-Man, 'Monica'yı Yeniden Başlat' diyor

@ G-Man adlı .pngdizindeki s ile eşleşmenin nesi yanlış phone? Sadece dışlamaya çalıştığımızı sanıyordum one?
toxefa

1
Eh, ile bağlantılı olarak kullandığınız için, adlı bir dizindeki dosyaları hariç tutmaya -notneden olduğu anlamına gelir . findphone
G-Man 'Monica'yı Yeniden Başlat' diyor

6

In zsh , koyun setopt extended_globGözlerinde farklı ~/.zshrc. Ardından , çağrılan dizini hariç tutmak için joker desenini ^one kullanabilirsiniz one.

ls ^one/*.png

Alt dizinlere geri dönmek istiyorsanız, **/yinelemeli globbing için kullanın . oneÜst düzey dizinin yanı sıra üst düzey dizinde çağrılan dizini hariç tutmak için :

ls ^one/**/*.png

Adlı bir alt dizindeki dosyaları hariç tutmak one, ancak alt dizinlerindeki dosyaları hariç tutmak için:

ls **/^one/*.png

oneHerhangi bir düzeyde çağrılan bir alt dizinin altındaki dosyaları hariç tutmak için , #işleç olumsuzlama etrafındayken bir yineleme deseni kullanın :

ls (^one/)#/*.png
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.