Einige Dateien haben '?' am Ende des Dateinamens, und ich muss solche Dateien finden

Einige Dateien haben '?' am Ende des Dateinamens, und ich muss solche Dateien finden

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

^Msoll 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 ^Mfinden .^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'
  • inamewird 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 ^Mmit der Kombination von direkt in eine Bash-Befehlszeile wechseln Ctrl + v Ctrl + m. Der tatsächliche Schlüssel hängt möglicherweise von bindder 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 ^MZeichen enden. Wenn es das gewünschte Ergebnis liefert, ändern Sie das xargs -0 lsin xargs -0 rm -fund führen Sie das Skript erneut aus, um die Dateien zu entfernen

verwandte Informationen