Syntax för rekursiv "ls" med exkluderade subfolders?

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
rokk
Inlägg: 106
Blev medlem: 01 jun 2011, 12:00
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Syntax för rekursiv "ls" med exkluderade subfolders?

Inlägg av rokk »

Hej!

Jag vill lista ett gäng filer tillhörande en webbplats sorterat på datum filerna ändrats.

Jag har en mapp-struktur som liknar det här:
  • webbplats/
    • admin/
      • gfx/
      • logs/
      • icons/
      • images/
      • js/
    • chache/
      • pages/
      • related/
    • templates/

Det jag söker är syntaxet för att lista alla filer som ligger under mappen webbplats (även från undermappar) men jag vill exkludera några mappar, t.ex. ~/webbplats/chache/ och ~webplats/admin/icons/.

Att exkludera mappar som ligger direkt under ~/webbplats/ är inga problem:

Kod: Markera allt

ls -ltR !(chache|media)
men hur gör jag om jag även vill exkludera t.ex. ~webbplats/admin/icons/ ?
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Syntax för rekursiv "ls" med exkluderade subfolders?

Inlägg av ubot »

Kod: Markera allt

ls -ltR !(chache|media) | grep -v "/webbplats/admin/icons/\|/webbplats/chache/"
för att exkludera /webbplats/admin/icons/ och /webbplats/chache/ eller

Kod: Markera allt

ls -ltR !(chache|media) | grep -v "/webbplats/"
för att exkludera /webbplats/ och alla underkataloger till webbplats-katalogen.

Kommandot find kanske är något för dig: https://help.ubuntu.com/community/find
rokk
Inlägg: 106
Blev medlem: 01 jun 2011, 12:00
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Syntax för rekursiv "ls" med exkluderade subfolders?

Inlägg av rokk »

Tack för svaret. Tyvärr fungerar det inte som jag hade tänkt mig.

grep -v "/webbplats/admin/images/" tar bara bort själva rubriken och jag vill att allt som finns i de mappar jag exkluderar inte ska visas.

Så om resultatet ser ut som följer utan grep

/webbplats/admin/images:
totalt 32
-rw-r--r-- 1 daniel daniel 108 2011-09-03 10:29 borderMiddleLeft.png
-rw-r--r-- 1 daniel daniel 216 2011-09-03 10:29 borderTopLeft.png
-rw-r--r-- 1 daniel daniel 108 2011-09-03 10:29 borderMiddleRight.png

blir det med grep-kommandot
totalt 32
-rw-r--r-- 1 daniel daniel 108 2011-09-03 10:29 borderMiddleLeft.png
-rw-r--r-- 1 daniel daniel 216 2011-09-03 10:29 borderTopLeft.png
-rw-r--r-- 1 daniel daniel 108 2011-09-03 10:29 borderMiddleRight.png

och jag vill att det ska försvinna helt.

Ja find har jag också försökt med men med ungefär lika dåligt resultat :P

Några fler idéer?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Syntax för rekursiv "ls" med exkluderade subfolders?

Inlägg av David Andersson »

rokk skrev:Några fler idéer?

Kod: Markera allt

find ~/webbplats '(' -name cache -or -name icons ')' -prune -or -type f -ls
Ovanstående visar inte mapparna cache och icons oavsett vilken nivå, så se upp om du har flera cache och icons och inte vill dölja alla.

Den sorterar inte, men det gör inte ls -ltR heller. (Den senare sorterar bara inom varje mapp, inte över alla filer). Om det är mindre än ca tusen filer kan man sortera alla i tidsordning med:

Kod: Markera allt

find ~/webbplats '(' -name cache -or -name icons ')' -prune -or -type f -print0 | xargs -0 ls -ltd
Om det är mer än ca tusen så delar xargs upp jobbet i flera appliceringar av "ls -ltd" med en klump filer i varje, och då blir det bara sorterat inom varje klump.

Bästa sättet att lösa det beror på vad du egentligen vill ha. Är det att få en överblick vilka som är nyast eller äldst? Exempel, lista filer nyare än (eller ändrade inom senaste) 48 timmar:

Kod: Markera allt

find ~/webbplats '(' -name cache -or -name icons ')' -prune -or -type f -mmin -2880 -ls
(minus = mindre än eller lika med; 2880 minuter = 48 timmar)

Ett annat alternativ är att börja med find och ls -ld och sen sortera på datumfältet. (Datum från ls brukar numera varar i iso-format yyyy-mm-dd hh:mm så det blir enklare att sortera.)

Kod: Markera allt

find ~/webbplats '(' -name cache -or -name icons ')' -prune -or -type f -print0 | xargs -0 ls -ld | sort (argument för att sortera på datumfältet)
rokk
Inlägg: 106
Blev medlem: 01 jun 2011, 12:00
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Syntax för rekursiv "ls" med exkluderade subfolders?

Inlägg av rokk »

Strålande! Tusen tack :)
Skriv svar

Återgå till "Terminalforum"