Ich habe keine Ahnung, wie diese Dateien entstanden sind, aber so sieht es aus mit ls -lh
:
total 8.1G
-rw-r--r-- 1 root root 1.6G Apr 13 2022 test_some_data_S6_R2.fastq.gz?
-rw-r--r-- 1 root root 1.5G Apr 13 2022 test_some_data_S6_R1.fastq.gz
Wenn ich ls verwende, um den Dateinamen automatisch zu vervollständigen, sieht es folgendermaßen aus:
ls /path/to/file/test_some_data_S6_R2.fastq.gz^M
^M
soll in DOS Carrier Return sein, daher vermute ich, dass jemand den Namen von einem Windows-System kopiert und ihn zum Benennen der Datei verwendet hat. Es gibt viele Methoden zum Ersetzen des Inhalts der Datei, aber in meinem Fall möchte ich Dateien mit im Namen ^M
finden .^M
Ich habe es versucht find /path/with/files/ -iname "^M"
, aber kein Glück. Ich habe versucht, mit zu entkommen \
, aber immer noch kein Glück. Ich melde mich per SSH bei einemRHELMaschine mit MobaXTerm, also habe ich die Windows-Tastenkombination CTRL+ Q, CTRL+ ausprobiert M, aber sie blendet das aktuelle Arbeitsfenster aus und fügt nicht ein ^M
.
Antwort1
In Bash können Sie verwenden, um das Steuerzeichen $'\r'
einzufügen .^M
find /path/with/files -name '*'$'\r'
iname
wird nicht benötigt, da der Glob-Ausdruck keine Buchstaben enthält- ein Asterisk muss eingefügt werden, um dem Namen vor dem
^M
Ich konnte sogar ^M
mit der Kombination von direkt in eine Bash-Befehlszeile wechseln Ctrl + v Ctrl + m. Der tatsächliche Schlüssel hängt möglicherweise von bind
der Zuweisung von ab quoted-insert
.
find /path/with/files -name '*^M'
Antwort2
Hier ist eine kleine Variation der Methode, die@choroba hat in seiner Antwort gepostet.
Erstellen Sie in einem Texteditor ein kleines Skript (hier myscript genannt), das wie folgt aussieht
#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls
Der einzige Trick dabei ist, dass Sie das Zeichen wörtlich einfügen müssen ^M
, und je nach Texteditor gibt es dafür spezielle Tricks. In vi oder vim ist es ctrl- K. In emacs ist es ctrl- Q. Verwenden Sie, was immer benötigt wird.
Machen Sie dann das Skript ausführbar:
chmod 755 myscript
Führen Sie dann das Skript aus ./myscript
. Es sollte nur die Dateien auflisten, die mit dem ^M
Zeichen enden. Wenn es das gewünschte Ergebnis liefert, ändern Sie das xargs -0 ls
in xargs -0 rm -f
und führen Sie das Skript erneut aus, um die Dateien zu entfernen