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 xargs
an, Zeilenumbrüche als Trennzeichen zu verwenden:
find . -type f | grep ).MOV | xargs -d'\n' rm
Besser ist, find
den Abgleich vorzunehmen und zu nutzen -print0
und xargs -0
zuzulassenbeliebigZeichen in den Dateinamen, sogar \n
!
find . -type f -name '*).MOV' -print0 | xargs -0 rm
Noch besser: find
Rufen Sie einfach rm
direkt an.
find . -type f -name '*).MOV' -exec rm {} +
Am besten überspringen Sie es rm
und lassen find
das 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!