Portál AbcLinuxu, 14. května 2025 04:02

Dotaz: Odstranenie suborov rekurzivne

7.9.2016 13:36 asdfghijklom2016
Odstranenie suborov rekurzivne
Přečteno: 305×
Odpovědět | Admin
Zdravim, potreboval by som poradit ako odstranit vsetky subory vo vsetkych podpriecinkoch ktore sa volaju XYZ. Cesty su nasledovne:
/data/test1/XYZ
/data/januar/XYZ
/data/ijkl/XYZ
Cize aby sa nasli vsetky XYZ podpriecinky a v nich zmazat vsetky subory. Vdaka.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.9.2016 13:40 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
Odpovědět | | Sbalit | Link | Blokovat | Admin
find
find . -type d -name "XYZ" -exec rm -f {} \;
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
7.9.2016 13:46 asdfghijklom2016
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
# find . -type d -name "XYZ/" -exec rm -f {} \;
find: upozornenie: Unixové názvy súborov väčšinou neobsahujú lomky (hoci názvy ciest áno). To znamená, že '-name `XYZ/'' bude pravdepodobne stále vyhodnotené ako zlyhanie v tomto systéme. Viac použiteľným testom môže byť '-wholename', alebo možno '-samefile'. Alebo, ak používate GNU grep, môžete použiť 'find ... -print0 | grep -FzZ `XYZ/''.
# find . -type d -name "XYZ" -exec rm -f {} \;
rm: nie je možné odstrániť `./XYZ': Je adresár
Adresar musi zostat zachovany a len potrebujem premazat subory v nom. Vdaka.
7.9.2016 15:11 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
find /path/to/data -type d -name XYZ -exec find '{}' -maxdepth 1 -type f \; \
| (readarray -t files; rm "${files[@]}";)

Tohle^^^ nedá příkazu rm žádný adresář ani jiný zásadní důvod ke stížnostem a bude to fungovat i pro soubory a adresáře s názvem začínajícím tečkou nebo s mezerami v názvech. Doporučuji dát si napřed echo před rm a vyzkoušet si tak, co přesně to bude dělat.

Trochu tomu může pomoct -prune. Hodí se, (a) pro efektivitu, pokud se ví, že v případných podadresářích uvnitř XYZ už nemůže být další XYZ, případně (b) pro variantu zadání, kde ve struktuře podadresářů XYZ může být další XYZ, který se ale už nemá promazávat. Stejně jako výše, echo is your friend:

find /path/to/data -type d -name XYZ -prune -exec find '{}' -maxdepth 1 -type f \; \
| (readarray -t files; rm "${files[@]}";)
7.9.2016 15:19 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
skrytý komentář Náš administrátor shledal tento komentář závadným.

na žádost autora implicitně skryto jako zavádějící

Zobrazit komentář
7.9.2016 15:24 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne

Uuuuf, pozor, tohle^^^ je naprosto hloupé a nebezpečné, protože to smaže všechny soubory ve stejném adresáři jako XYZ, nikoliv uvnitř XYZ. Asi jsem měl zatmění mysli, když jsem to „zjednodušení“ psal.

Inu, nic naplat, první slovo platí, druhé leze z prdele.

7.9.2016 15:20 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
zapomenuré r u rm
rm -rf
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
7.9.2016 15:25 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne

On chtěl smazat všechny soubory, ne nutně podadresáře.

7.9.2016 15:11 izidor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
Odpovědět | | Sbalit | Link | Blokovat | Admin
rm /data/*/XYZ/*

pokud to ma byt vcetne podadresaru, tak

rm -r /data/*/XYZ/*
7.9.2016 15:26 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne

Pouze pokud je hloubka zanoření vždy stejná, což ale zadání nespecifikuje. Pokud není vždy stejná, asi nezbude nic jiného než find.

7.9.2016 17:53 Tomáš
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/zsh
setopt extendedglob
rm -f **/XYZ/*(.)

Pokud máte jako shell Zsh a extendedglob v .zshrc, tak stačí jen ten poslední řádek.;-)

7.9.2016 21:03 jekub
Rozbalit Rozbalit vše Re: Odstranenie suborov rekurzivne
Odpovědět | | Sbalit | Link | Blokovat | Admin
find . -type d -name xyz -exec sh -c "cd {} && rm -f *" \;

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.