Wie lösche ich alle Dateien, die eine bestimmte Zeichenfolge in einem Verzeichnis in UNIX enthalten?

Wie lösche ich alle Dateien, die eine bestimmte Zeichenfolge in einem Verzeichnis in UNIX enthalten?

Ich habe mehrere Beispiele gefunden, die funktionieren, solange die Dateinamen keine Leerzeichen enthalten. Leider habe ich Leerzeichen in meinen Dateinamen (das war nicht meine Entscheidung, tatsächlich sind es die, die ich entfernen muss).

Ich dachte beispielsweise, dass Folgendes funktionieren würde:

finden . -Typ f | grep ).MOV | xargs rm

weil ich die Dateien löschen möchte wie:

  • L112 (1).MOV
  • L113 (1).MOV
  • L113 (2).MOV
  • usw.

und ich möchte die Dateien behalten wie

  • L112.MOV
  • L113.MOV
  • L114.MOV
  • usw.

Dies findet die Dateien korrekt:

finden . -Typ f | grep ).MOV

aber wenn ich es an rm weiterleite, bringen die Leerzeichen im Dateinamen alles durcheinander.

Für jede Hilfe wäre ich sehr dankbar.

Antwort1


rm *\).MOV

Antwort2

Weisen Sie xargsan, Zeilenumbrüche als Trennzeichen zu verwenden:

find . -type f | grep ).MOV | xargs -d'\n' rm

Besser ist, findden Abgleich vorzunehmen und zu nutzen -print0und xargs -0zuzulassenbeliebigZeichen in den Dateinamen, sogar \n!

find . -type f -name '*).MOV' -print0 | xargs -0 rm

Noch besser: findRufen Sie einfach rmdirekt an.

find . -type f -name '*).MOV' -exec rm {} +

Am besten überspringen Sie es rmund lassen finddas Löschen durchführen.

find . -type f -name '*).MOV' -delete

Oder in diesem konkreten Fall: Wer braucht schon die ganze schwere Maschinerie?

rm *\).MOV

Antwort3

Versuche dies:

find . -name "*).MOV" -exec rm {} \;

Antwort4

In den meisten Unix-Installationen können Sie ein Leerzeichen in einem Dateinamen kennzeichnen, indem Sie ihm einen Backslash voranstellen. Probieren Sie zum Beispiel Folgendes aus:

mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"

Geben Sie „ls“ ein und Sie sollten Folgendes sehen:

Datei 3 Datei 4 Datei1 Datei2

Geben Sie nun „ls *\ *“ ein und Sie sollten alles sehen, was ein Leerzeichen enthält:

Datei 3 Datei 4

Vielleicht reicht Ihnen also nur ein „rm *\ *“? Oder ändern Sie den regulären Ausdruck leicht, um ihn Ihren Anforderungen anzupassen.

Hoffentlich hilft das!

verwandte Informationen