it-swarm-eu.dev

Jak odstranit všechny soubory v adresáři?

Snažím se odstranit všechny soubory a podadresáře z adresáře. Použil jsem rm -r odstranit všechny soubory, ale chci odstranit všechny soubory a podadresáře, s výjimkou samotného horního adresáře.

Například mám top adresář jako images. Obsahuje soubory header.png, footer.png a podadresář.

Nyní chci smazat header.png, footer.png a podadresář, ale ne images.

Jak to mohu udělat v Linuxu?

78
poorani

Pokud se váš nejvyšší adresář nazývá images, spusťte rm -r images/*. To používá operátor globálního prostředí Shell * běžet rm -r na každém souboru nebo adresáři v rámci images.

63
Jordan Lewis

Chcete-li smazat skryté soubory, musíte zadat:

rm -r images/* images/.*

S pouzdry, jejichž glóby zahrnují . a .., povede to k chybě jako

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

ale odstraní skryté soubory.

Přístup bez chybové zprávy je použití hledání/smazání s vědomím. Toto je gnu-find.

find images -mindepth 1 -delete

Ve vašem nálezu může chybět -mindepth nebo -delete predikát, v tom případě byste mohli udělat:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

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

  • použijte ls -Ab, aby odpovídal všem souborům/adresářům

    cd dir_name && rm -rf `ls -Ab`
    
  • použijte find tak, aby odpovídal všem souborům/adresářům

    find dir_name -mindepth 1 -delete
    

    nebo, pokud váš find nepodporuje -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • smažte složku a poté ji znovu vytvořte

    rm -rf dir_name && mkdir dir_name
    
  • in bash,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Pro smazání všech pravidelných souborů rekurzivně v adresáři je tento příkaz (za předpokladu GNU nebo FreeBSD find) dost dobrý):

find . -type f -delete

Zůstanou tak všechny nestandardní soubory jako symlinks (ať už odkazují na běžné soubory nebo ne), adresáře, fifos, sokety, zařízení ...

Viz také:

find . ! -type d -delete

smazat soubory jakéhokoli typu kromě adresář.

11
amit singh

Vyzkoušejte tuto verzi:

 rm -r test/*
6
demas

Používám zde příkaz find:

Krok 1: Najděte všechny soubory a smažte je:

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

Příklad:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Krok 2: Najděte všechny podadresáře a vymažte je:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

Otázkou bylo vyprázdnit adresář = odebrat obsah adresáře včetně skrytých souborů, ale nikoli samotný adresář. Příkaz find s -mindepth 1 je ve skutečnosti správný způsob, ale aby se předešlo chybovým zprávám, musí být spojen s -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

syntaxe rm je:

rm [OPTION]... FILE...

Musíte tedy výslovně uvést příslušnou cestu, např.

rm -r sub_dir/
0
Zaur Nasibov

Adresář můžete odstranit pomocí následujícího příkazu:

Sudo rm -r directoryname1/2/3/*

Po 3/* bude smazán celý adresář.

Příklad Sudo rm -r Stahování/píseň/*

Smažou se všechny soubory, které jsou v Downloads/song.

0

Funguje to perfektně pro mě, testováno několik variací fungovalo pokaždé.

Z adresáře, který obsahuje adresář obrázků.

rm -frd ./images/*

před:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

po:

images/
0
deb-linux-user

Odstranění všech souborů a podadresářů v aktuálním adresáři včetně skrytých, bez chybové zprávy :

rm -rf .[^.] .??* *

Nebo z nadřazeného adresáře:

rm -rf images/.[^.] images/.??* images/*

Od https://serverfault.com/a/47940/269538 .

0
this

Jinou možnost:

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

zdroj: https://askubuntu.com/a/552834/56648

0
Eyal Levin