2012-06-26 19 views
8

Próbuję wykonać następujące czynności na OSX:Jak ls --ignore na OSX

ls -lR --ignore *.app

Tak, że mogę rekursywnie przeglądać wszystkich folderów wyjątkiem folderów .app.

Jednak wygląda na to, że w Darwin nie ma opcji --ignore lub --hide.

Może skrypt rekursywnie szukać jeden folder głęboki dla danego zestawu i nie jestem pewien, czy mogę rurę ls -lR przez wszystko z powodu formatu wyjścia:

./ROOT/Applications/Some_app: 
drwxr-xr-x 3 admin root 102 26 Jun 11:03 app-bundle.app #<- WANT THIS 
[email protected] 24 admin root 816 26 Jun 11:24 folder   #<- WANT THIS 

./ROOT/Applications/Some_app/app-bundle.app:     #<- DON'T WANT 
drwxr-xr-x 7 admin root 238 26 Jun 11:03 Contents   #<- DON'T WANT 
... 

Odpowiedz

7

użytkowania find:

find . -ls -name '*.app' -prune 
+0

znaleźć !! _hangs głowa ze wstydem_ działa jak urok. Dziękuję (czekanie na opóźnienie odpowiedzi) – hoss

+0

Twoja druga iteracja jest znacznie lepsza. – hoss

+0

Pomyślałem o tym jeszcze trochę i można to zrobić jeszcze prościej. Zawsze -ls. Jeśli jest to aplikacja, -prune. –

4

W bash można użyć rozszerzonego globowania, aby wykluczyć wzorzec.

shopt -s extglob # this must be on its own line 
echo !(*.app) # match everything except for the given pattern 

Jeśli masz wersję basha 4 lub wyższą, możesz użyć globstar, aby wykonać to rekursywnie.

shopt -s globstar 
shopt -s extglob 
echo **/!(*.app) 
+0

, potrzebuje trochę miłości awk, ale czy może być rekursywna? – hoss

+0

@hoss - tylko na bashu v4 lub wyższym, używając globstar. Dodano do odpowiedzi – jordanm

+1

To bardzo ładne i eleganckie rozwiązanie. – hoss

-1

Alternatywą jest do rury do grep:

ls | grep -v

+0

nie jestem pewien, czy rozwiąże to kwestię pod ręką, nie chcąc przejść do katalogów .app w rekurencyjnym wpisie. Jeśli użyłem 'ls -R | grep -v ".app" 'W rezultacie otrzymuję * wszystkie * pliki * oprócz * dla katalogu .app, ale włączając w to wszystkie pliki podrzędne i foldery. – hoss