Portál AbcLinuxu, 12. května 2025 13:31

Dotaz: Smazat vsechny slozky krome nejnovejsi

15.10.2019 18:04 matata | skóre: 13
Smazat vsechny slozky krome nejnovejsi
Přečteno: 432×
Odpovědět | Admin
Ahoj, poradíte prosím script který ba ve složce smazal vsechny podsložky krome nejnovejší složky?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.10.2019 18:57 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Odpovědět | | Sbalit | Link | Blokovat | Admin
FAQ ?
15.10.2019 21:52 debian+
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Odpovědět | | Sbalit | Link | Blokovat | Admin
# testovacie data
mkdir a; sleep 1; mkdir b; sleep 1; mkdir c; sleep 1; touch d; sleep 1; touch najnovsi

# zmaze okrem poslednej polozky, zo vsetkych priecinkov a suborov
ls -t | tac | head -n -1 | xargs rm -R
Max avatar 15.10.2019 22:40 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Jen bych doplnil, že by to nemělo být "ls -t", ale "ls -dt", protože tazatel chtěl adresáře.
Zdar Max
Měl jsem sen ... :(
16.10.2019 01:18 debian+
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Pozor !!! -d vrati nieco ine, ako predpoklad ze iba adresae !!!
Vid http://man7.org/linux/man-pages/man1/ls.1.html alebo si to prakticky odskusaj.
Max avatar 16.10.2019 10:17 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Nevím, mně to přijde ok "list directories themselves, not their contents". A samozřejmě jsem to zkoušel a funguje to. Resp. formát je :
ls -dt adresar/*/
Zdar Max
Měl jsem sen ... :(
16.10.2019 11:20 debian+
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Takto zapisane to funguje. Ale prakticky o mnozinu adresare sa stara /*/ shell. Skus is zamenit ls za echo. Vyhod -d a co dostanes. Nie je to presne, ze vypise adresare. Skus si ls -d /.

Dik, ale na druhej strane usetri ten zlozity find. Ale zas budes musiet odstranovat lomitka. Cize bez pomocnej premennej posl a premenna posledny bude nasledovne:
vysledny=`basename $((cd ../; ls -dt test/*/)|head -n 1)`
15.10.2019 23:06 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
ls--sort=time a --reverse, takže ten tac netreba. Ale má ten problém, že vypíše aj súbory a nie len adresáre. Ak som dobre pochopil, tak sa majú mazať len adresáre. Riešením by mohol byť find -type d alebo loop a test -d. No a miesto toho head by sa dal použiť tail +2 ... podľa chuti.
16.10.2019 03:21 debian+
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ktory casovy udaj myslis pod pojmom zmena pre polozku priecinka? Acces, modify or change? Dal som ze change.

Rob si s tym co chces:
#!/bin/bash

# TESTOVANIE - dalej 3 odseky dalej zakomentuj/zmaz, ak nechces testovat

# TESTOVANIE - pripravy priecinok na testovanie
rm -fR /dev/shm/test
mkdir /dev/shm/test

# presunie do precinku, v kt. maze
cd /dev/shm/test

# TESTOVANIE - vytvori testovacie subory
echo -n "vytvara testovacie subory "
mkdir a; sleep 1; touch b; sleep 1; mkdir c; sleep 1; mkdir zostat; sleep 1; touch d; sleep 1; touch e
echo " [ok]"

# posledny priecinok aj s casom
posl=`find -mindepth 1 -maxdepth 1 -path "./*" -type d -printf "%C+ %P\n" | sort | tail -n 1`
posledny="${posl:31}"

# mazem vsetky priecinky okrem posledneho
for p in `find -mindepth 1 -maxdepth 1 -path "./*" -type d`; do
	if [ ! "$p" = "./$posledny" ];
		then rm -R "$p";
	fi
done

# TESTOVANIE - vysledna hlaska o ukoneceni
echo "zmazane, okrem posledneho priecinku"
16.10.2019 04:43 debian+
Rozbalit Rozbalit vše Re: Smazat vsechny slozky krome nejnovejsi

Parameter -path "./*" je nadbytočný, zmaz si ho. A ifsom zle zalomil, má byť za then, nie pred.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.