it-swarm.dev

Jak odstranit všechny soubory z adresáře?

Nejblíže jsem se dostal

# rm /path/to/directory/*.*

ale to nefunguje pro soubory, které nemají příponu ...

323
user784637

Linux nepoužívá rozšíření. Je na tvůrci souboru, aby rozhodl, zda má název mít příponu. Linux se dívá na prvních několik bajtů, aby zjistil, s jakým typem souboru jedná.

  • Chcete-li odstranit všechny nezakryté soubory * v adresáři, použijte:

    rm /path/to/directory/*
    

    Zobrazí se však chyba pro každý podadresář, protože v tomto režimu je možné pouze mazat soubory.

  • Chcete-li odstranit všechny skryté soubory a podadresáře (spolu se veškerým jejich obsahem) v adresáři, použijte:

    rm -r /path/to/directory/*
    

* Skryté soubory a adresáře jsou ty, jejichž jména začínají . (tečka) znak, např .: .hidden-file nebo .hidden-directory/. Všimněte si, že v Bash, pokud je nastavena možnost dotglobmožnost (která je ve výchozím nastavení vypnutá), bude rm působit i na skryté soubory, protože budou zahrnuty když * je Shell rozšířen o seznam argumentů pro název souboru.

373
Rinzwind
  • Chcete-li odebrat složk s veškerým obsahem (včetně všech vnitřních složek):

    rm -rf /path/to/directory
    
  • Odebrání veškerého obsahu obsah složky (včetně všech vnitřních složek), nikoli samotné složky:

    rm -rf /path/to/directory/*
    

    nebo

    rm -rf /path/to/directory/{*,.*}
    

    pokud se chcete ujistit, že jsou také odstraněny skryté soubory/adresáře.

  • Chcete-li odebrat všechny "soubory" z vnitřní složky ( ne odebrání vnitřních složek):

    rm -f /path/to/directory/{*,.*}
    


  • Varování: Pokud máte v cestě mezery, vždy použijte uvozovky.

    rm -rf /path/to the/directory/*
    

    odpovídá 2 samostatným rm -rf volá:

    rm -rf /path/to
    rm -rf the/directory/*
    

    Chcete-li se tomuto problému vyhnout, můžete použít 'single-quotes' (nerozbaluje se Proměnné prostředí) nebo "double-quotes" (expanduje Proměnné prostředí):

    rm -rf "/path/to the/directory/"*
    


Kde:

  • rm - znamená "remove"
  • -f - znamená "force", což je užitečné, pokud nechcete být dotázáni/vyzváni, pokud chcete například odstranit archiv.
  • -r - znamená "rekurzivní", což znamená, že chcete rekurzivně procházet každou složku a všechno odstranit.
188

Chcete-li odebrat všechny soubory v adresáři (včetně skrytých souborů a podadresářů), spusťte:

rm -rf /path/to/directory/{*,.*}
45

Pokud chcete smazat pouze soubory v adresáři/cesta/do /, můžete to udělat

find /path/to/directory -type f -print0| xargs -0 rm 

nebo

find /path/to/directory -type f -exec rm '{}' \;

Zatížení můžete provádět pomocí find, výhodou je, že můžete najít, co se najde, aniž byste jej připojili k rm, abyste viděli, co bude smazáno, než začnete.

11

Chcete-li odstranit všechny soubory a adresáře (včetně skrytých ) v adresáři, můžete vyzkoušet následující:

  • smažte složku a poté ji znovu vytvořte

    rm -rf dir_name && mkdir dir_name
    
  • použijte find

    find dir_name -mindepth 1 -delete  
    

Zde zadáme -mindepth 1 k vyloučení samotného adresáře dir_name.
Podívejte se na následující odkaz:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

10
zeekvfu

Pokud chcete také odstranit všechny podadresáře a samotný adresář, můžete použít rm -rf /path/to/directory. Před stisknutím tlačítka návrat však vždy zkontrolujte řádek, rm -rf může také způsobit spoustu havocků, např. pokud omylem vložíte mezeru za první lomítko a máte oprávnění superuživatele ...

6
Tobias Kienzler

Protože tato otázka je neustále na vrcholu Google, když ji hledám sám:

Ostatní odpovědi trpí různými problémy:

  1. Mezi ně patří . A .., Což je hlučné, matoucí a nepříjemné.

  2. Některé z nich zapomínají skryté soubory (soubory začínající tečkou).

  3. Neodstraňují se ve správném (nejhlubším) pořadí, aby bylo možné odstranit adresář.

  4. Sestupují do jiných (připojených) souborových systémů, což je často nežádoucí.

  5. Je obtížné je správně rozšířit o další parametry (více k tomu níže).

Chcete-li tedy OPATŘENÍ odstranit všechny soubory A složky v adresáři, postupujte takto:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Všimněte si, že jsem přidal argument -xdev, Aby se zabránilo sestupu na hory (jako /proc Atd.).

Proč ne -depth Nebo -delete?

Navzdory tomu, že mě za to lidé neustále snižují, mají tyto metody nevýhodu: nezdá se, že by byly dostatečně roztažitelné, aby umožnily podadresáři -Prune (Bez zavádění dalších problémů). Na rozdíl od této metody můžete vložit

-not \( -path "${DIR}/subdir" -Prune \)

před argumentem -mindepth vyloučit subdir z odstranění jeho obsahu.

1
user541686

Do adresáře můžete cd a spustit příkaz rm *.* jako v DOSu, pokud si pamatujete.

0
V K Mavani

Chcete-li smazat aktuální adresář, můžete použít například rm -d ./*

-d říká, aby odstranil také adresáře.

0
arviman