Chci vyhledat více souborů pomocí find a všechny smazat pomocí -exec. Snažil jsem se

find ./ -type f -name fileA -o -name fileB -exec rm {} \; 

, ale zdá se, že to odstraní soubory „fileB“ pouze ne fileAs.

Komentáře

  • Rovněž odstraní všechny adresáře s názvem " fileB ", mimochodem.
  • @Wildcard Ne s přímým rm (' zkusím, ale neuspěju ).
  • @Kusalananda, ah, správně.

Odpověď

-o platí také pro akci, proto musíte věci seskupit:

find ./ -type f \( -name fileA -o -name fileB \) -exec rm {} \; 

BTW, váš find Implementace může také podporovat -delete:

find ./ -type f \( -name fileA -o -name fileB \) -delete 

Komentáře

  • a pokud ne ' t, pravděpodobně podporuje -exec rm {} +

Odpověď

Další alternativa:

 WARNING: it is possible that due to funny characters in directory names it is possible that unintended files might be deleted. find ./ -type f \( -name fileA -o -name fileB \) -print | xargs rm -f 

Nebo je-li to možné, chytit soubory s legračními znaky:

 NOTE: On some systems -print0 and -0 options are not available. But this would be the preferred and safer method) find ./ -type f \( -name fileA -o -name fileB \) -print0 | xargs -0 rm -f 

Komentáře

  • Líbí se mi, jak jste se vrátili téměř o rok později, jen abych přidal poznámku o jménech souborů, ' s věnování. : D

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *