Portál AbcLinuxu, 17. července 2025 18:33
Majme velky adresarovy strom obsahujuci stovky suborov roznych druhov v mnohych podadresaroch.
Ako mozem v tomto adresarovom strome zmazat
a) vsetky subory s velkostou mensou ako X kB
b) alebo vsetky subory okrem tych s priponami .txt a .sh,
tak aby mi neostali prazdne podadresare ak bol pri horeuvedenom mazani ich obsah vymazany?
P.S. Ulohu by bolo mozne riesit aj selektivnym kopirovanim do noveho adresaroveho stromu ... ale ako na to?
Pomoci find
, konkretne
find <adresar> <podminka> -exec rm {} \;
viz. man find
find adresář podmínka -print0 | xargs -0 rmSmazat nově vzniklé prázdné adresáře, ale ponechat existující prázdné adresáře je složitější (a nevím, jestli to chceš -- udělal bych to testem na mtime); všechny prázdné normálně mažu
find adresář -type d | tac | xargs rmdirslabší povahy raději na konec přidají
2>/dev/null
;-)
find -depth -type d -empty -exec rmdir '{}' \;
Myslím, že je to trochu čistší
A ako mu v tej podmienke poviem, ze ma mazat subory mensie ako 20 kB? V prepinaci -size prikazu find sa hovori len o nejakych blokoch ... :o(
Diky, a ako by som mohol vyriesit ulohu B - skopirovat subory s urcenymi priponami do noveho adresaroveho stromu, tak aby sa nachadzali v rovnakej adresarovej strukture ako boli povodne?
Prikaz cp by to nakopiroval vsetko do jedneho adresara, ci nie?
To uz tak jednoduchy nebude, v jednom prikazu to nepude vubec rekl bych. Asi bude potreba pouzit spojeni prikazu find
na vyhledani souboru s danou priponou, dirname
na urceni adresare kde je, mkdir -p
na vytvoreni toho adresare nekde jinde a cp
na zkopirovani
Ahoj
Tohle by Ti snad mohlo fungovat:
cd <FROM_DIR>
find . -type f -name \*.<SUFFIX> -exec \
cp --parents {} <TO_DIR> \;
Mej se
Martin
Jo, a kdyby tech pripon bylo vic, tak to samy, az na to, ze ten find by mel:
\( -name \*.<SUFFIX1> -o -name \*.<SUFFIX2> atd. \)
Martin
... | xargs cp --parents --target-directory=<TO_DIR>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.