GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte pouze soubory v adresáři v adresářích linux NOT

Vzhledem k tomu, že toto je ve vyhledávání Google vysoko, nejjednodušší odpověď je:

rm $directoryPath/*

kde $directoryPath je adresář, který chcete vyprázdnit. Poděkování by mělo jít na cbm3384 (který z nějakého důvodu pro tuto odpověď dostal záporné hlasy, proč?)

Pokud nechcete potvrdit:

rm -f $directoryPath/*

Pokud nevěříte, zkuste man rm nebo

mkdir -p 1/2/3; echo 'hello1' > 1/hello1.txt; echo 'hello2' > 1/2/hello2.txt;echo 'hello3' > 1/2/3/hello3.txt
rm 1/2/*

Výše uvedené vytvoří adresářovou strukturu, která má v každé složce 'helloX.txt' (X je úroveň adresáře). rm 1/2/* smaže hello2.txt a ponechává druhou strukturu nedotčenou.

Také rm */*/* odstraní pouze hello2.txt . Je to jediné, které odpovídá vzoru.

Jen příklad souboru Makefile, který vyčistí adresář cakephp tmp a ponechává strukturu adresářů nedotčenou:

clean:
    -rm -f tmp/*
    -rm -f tmp/*/*
    -rm -f tmp/*/*/*
    -rm -f tmp/*/*/*/*

Mínus před rm znamená "nezastavovat při chybách" (neodstraněný adresář vrátí chybu). Pokud chcete, aby byla nějaká úroveň uložena, stačí odstranit tento řádek, např. druhý řádek rm odstraní protokoly.

Dejte mi vědět, pokud máte systém, který dělá něco jiného (BSD?).

UPRAVIT: Testoval jsem to na ubuntu 12.04, OSX lion a sourceforge.net shell. Všichni se chovají jako ve výše uvedeném vysvětlení.


find PATH -maxdepth 1 -type f -delete

ALE toto vás nevyzve k potvrzení ani k výstupu toho, co bylo právě odstraněno. Proto je nejlepší jej nejprve spustit bez akce -delete a zkontrolovat, zda se jedná o správné soubory.


Můžete použít find s -type f pouze pro soubory a -maxdepth 1 takže find nebude vyhledávat soubory v podadresářích /path/to/directory . rm -i vás při každém smazání vyzve, abyste mohli smazání potvrdit nebo zamítnout. Pokud vám nezáleží na tom, abyste byli požádáni o potvrzení každého smazání, změňte jej na rm -fv (-f pro vynutit smazání). -v flag dělá to tak, že při každém smazání se vytiskne zpráva s informací, který soubor byl právě smazán.

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

To by mělo splňovat kritéria:

NE adresáře
NE podadresáře
NOT soubory v těchto podadresářích.


Linux
  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak odstranit soubory a adresáře v příkazovém řádku Linuxu [Výukový program pro začátečníky]

  3. Linux Odstraňte soubory a adresáře

  1. Vytváření a odstraňování souborů a adresářů pod Linuxem

  2. Maximální počet souborů/adresářů na Linuxu?

  3. bash - odstraní všechny adresáře (a obsah), ale ne soubory v pwd

  1. Jak nahrávat nebo stahovat soubory/adresáře pomocí sFTP v Linuxu

  2. Kopírování souborů a adresářů v Linuxu

  3. 9 Linuxových adresářů, které musíte zálohovat, a jeden, který byste neměli