Alla kataloger utan specifik filtyp?

Permalänk
Medlem

Alla kataloger utan specifik filtyp?

Känns som jag har lite otur när jag tänker nu, men om man har en mapp med låt säga hundra undermappar med godtyckliga namn och det i vissa av dessa undermappar finns en eller flera textfiler med godtyckliga namn men som slutar på .txt.

Jag kan då lätt få fram en lista på vilka av dessa kataloger som innehåller en sådan textfil. Men om jag vill göra det omvända pch få fram en lista på de kataloger som inte innehåller någon text-fil, hur gör man enklast då?

Permalänk
Medlem
Permalänk
Medlem
Skrivet av CymbalCrasher:

ok, men hur ger det mig en lista över vilka underkataloger som inte innehåller en txt-fil? Jag vill inte kopiera något.

Permalänk
Permalänk
Medlem

Varför rekommenderar alla lösningar för Windows när tråden ligger i Linuxforumet?

Permalänk
Medlem

Hahahaaaa jaaaa, jag tog för givet. Det kändes onekligen mer som ett windowsproblem än ett linuxproblem.. ber om ursäkt för min dåliga länk.

Permalänk
Medlem

Spontant borde det här gå att anpassa till ditt problem va?
https://askubuntu.com/questions/196960/find-directories-that-...

Permalänk
Medlem

treesize free kan nog fixa det med en filtrering

Permalänk

echo 'import os kataloger = {} kataloger_med_textfil = [] kataloger_utan_textfil = [] for rot, underkataloger, filer in os.walk("."): if rot not in kataloger: kataloger[rot] = False for i in underkataloger: if rot+"/"+i not in kataloger: kataloger[rot+"/"+i] = False for i in filer: if i.endswith(".txt"): kataloger[rot] = True for i in kataloger.keys(): if kataloger[i]: kataloger_med_textfil += [i] else: kataloger_utan_textfil += [i] print("Följande kataloger innehåller minst en textfil:") print(kataloger_med_textfil) print("Följande kataloger innehåller inte en enda textfil:") print(kataloger_utan_textfil)' | python3

Jag antar att du endast är intresserad av filer som slutar med ".txt" men struntar i filer som slutar med ".TXT". Microsoft Windows har dille på att skapa filer med stora filnamn.

Permalänk
Medlem
Skrivet av Napoleongl:

Spontant borde det här gå att anpassa till ditt problem va?
https://askubuntu.com/questions/196960/find-directories-that-...

Här är en oneliner baserat på länken som Napoleongl gav, samt lite inspiration från: https://unix.stackexchange.com/a/79304

find . -type d -execdir bash -c 'shopt -s nocaseglob nullglob; set -- *.txt; [ "$#" = 0 ]' \; -print

Förklaring
För varje mapp under nuvarande mapp kör bash med inställningarna att när den expanderar "*.txt" så matcha både gemener och versaler (nocaseglob), och om ingen fil matchar mönstret expandera till ingenting (nullglob). Där filerna den matchar blir input argumenten (set -- *.txt). Sedan kollar den om antalet argument är 0 ([ "$#" = 0 ]). Vilket blir status koden bash returnerar till find. Om status är 0, alltså uttrycket "$#" = 0 är sant, så skriv ut mappen (-print)

Permalänk
Medlem

Så här hittar du alla kataloger som innehåller .txt

find -name "*.txt" -type f -exec dirname {} \; > with.txt; uniq with.txt

Permalänk
Medlem
Skrivet av orp:

Så här hittar du alla kataloger som innehåller .txt

find -name "*.txt" -type f -exec dirname {} \; > with.txt; uniq with.txt

Du behöver inte skriva resultatet till en fil innan du kör uniq, utan du kan skicka det direkt med en pipe.

find -name "*.txt" -type f -exec dirname '{}' \; | uniq