GNU/Linux >> Znalost Linux >  >> Linux

Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

Mám adresář s více než 1000 soubory. V textovém souboru mám asi 50 názvů souborů, jeden na řádek. Chtěl bych smazat všechny soubory v adresáři, jejichž názvy souborů neodpovídají záznamu v seznamu. Jaký je nejlepší způsob, jak to udělat? Spustil jsem skript Shell, ale nemohl jsem určit správný příkaz, který by měl určit, zda je název souboru na seznamu. Děkuji.

Přijatá odpověď:

Uvědomuji si, že jakoukoli otázku, jak smazat soubory, je třeba brát s velkou opatrností.
Moje první odpověď byla příliš ukvapená, nevzal jsem si na vědomí, že seznam souborů může být pro použití s ​​egrepem poškozen. Upravil jsem odpověď, abych toto riziko snížil.

To by mělo fungovat pro soubory, které nemají v názvu mezeru:

Nejprve znovu vytvořte seznam souborů, abyste se ujistili, že přesně odpovídá názvu souboru:

sed -e 's,^,^,' -e 's,$,$,'  filelist  > newfilelist 

sestavení příkazů rm

cd your_directory
ls | egrep -vf newfilelist   | xargs -n 1 echo rm  >  rmscript

Zkontrolujte, zda vám rm skript vyhovuje (Můžete to udělat pomocí „vim“ nebo „méně“).
Poté proveďte akci:

sh -x rmscript

Pokud mají soubory ve svém názvu mezery (pokud mají soubory " v názvu to nebude fungovat) :

ls | egrep -vf newfilelist  | sed 's,^(.*)$,rm "1",' > rmscript

samozřejmě seznam souborů by neměl být ve stejném adresáři!

UPRAVENO:

Nathanův seznam souborů obsahoval jména, která odpovídala všem souborům v adresáři (např. „html“ odpovídá „bob.html“). Takže nic nebylo smazáno, protože egrep -vf absorboval veškerý proud. Přidal jsem příkaz k umístění „^“ a „$“ kolem každého názvu souboru. Měl jsem štěstí, že Nathanův seznam souborů byl správný. Pokud by byl formátován pro DOS s řádky ukončenými CR-LF nebo s dalšími mezerami, egrep by nezachoval žádné soubory a všechny by byly smazány.


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

  2. Odstraňte soubory a adresáře podle jejich jmen. Žádný takový soubor nebo adresář?

  3. Jak odstranit všechny soubory s konkrétní příponou v konkrétní složce?

  1. Vypsat všechny adresáře, které nemají soubor s daným názvem souboru uvnitř?

  2. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  3. Rekurzivně vypisujte všechny soubory v adresáři včetně souborů v adresářích symbolických odkazů

  1. Rozbalte všechny soubory v adresáři

  2. linuxový příkaz k vyprázdnění všech souborů v adresáři

  3. Jak odstranit všechny soubory v adresáři kromě některých?