Hoe verwijder je alle bestanden die beginnen met een bepaalde string in Linux
Ik moet alle bestanden vinden die beginnen met de naam NAME
in een mapstructuur en al deze bestanden verwijderen met één shell commando.
Ik moet alle bestanden vinden die beginnen met de naam NAME
in een mapstructuur en al deze bestanden verwijderen met één shell commando.
Verwijder alle bestanden in de huidige directory en zijn sub-directories waarvan de bestandsnaam begint met “foo”:
$ find . -type f -name foo\* -exec rm {} \;
NB: wees voorzichtig - maak eerst een back-up - doe ook eerst een test, bijvoorbeeld
$ find . -type f -name foo\*
geeft alleen de namen van de bestanden die verwijderd zouden worden.
Ik heb deze manier geprobeerd het werkt voor me probeer onderstaand commando.
rm -rf Example*
hier “Voorbeeld” is tekst die gemeenschappelijk is voor alle bestanden.
Met de optie globstar
(inschakelen met shopt -s globstar
):
rm -f **/NAME*
**/
breidt uit naar ./
, */
, */*/
, */*/*/
enz. Als je een directory naam hebt die begint met NAME
, zal het commando klagen dat rm
geen directories kan verwijderen, maar dat is alles.
Merk op dat dit tegen lengtebeperkingen van de opdrachtregel kan aanlopen als de glob met veel bestanden overeenkomt.
Als alternatief, met zo weinig mogelijk aanroepen van rm
, maar zonder beperkingen in de lengte van de commandoregel:
find . -type f -name 'NAME*' -exec rm -f {} +
(Let op de +
in plaats van \;
om het -exec
statement af te sluiten).
find . -name 'foo'* -type f -delete
lijkt het eenvoudigste antwoord.
Je kunt dit ook zonder de vlag -delete
uitvoeren om te zien welke bestanden er verwijderd worden.