これらのファイルがどのようにして作成されたのかは分かりませんが、次のような内容になっています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
lsを使用してファイル名を自動補完すると、次のようになります -
ls /path/to/file/test_some_data_S6_R2.fastq.gz^M
^M
は DOS ではキャリア リターンであるはずなので、おそらく誰かが Windows システムから名前をコピーして、それをファイル名に使用したのでしょう。ファイルの内容を置き換える方法はたくさんありますが、私の場合は、名前に が^M
含まれるファイルを検索したいのです。^M
を試しましたfind /path/with/files/ -iname "^M"
が、ダメでした。 で脱出しようとしました\
が、それでもダメでした。レッドヘルCTRLマシンで MobaXTerm を使用しているため、Windows のショートカット+ Q、CTRL+を試しましたMが、現在作業中のウィンドウが非表示になり、 が挿入されません^M
。
答え1
bash では、 を使用して制御文字$'\r'
を挿入できます^M
。
find /path/with/files -name '*'$'\r'
iname
glob式には文字が含まれていないので、これは不要です。- 前の名前と一致するようにアスタリスクを含める必要があります
^M
^M
の組み合わせで bash コマンドラインに直接入力することさえできましたCtrl + v Ctrl + m。実際のキーはbind
と の割り当てによって異なる可能性がありますquoted-insert
。
find /path/with/files -name '*^M'
答え2
ここで、この方法のちょっとしたバリエーションを紹介します。@chorobaが回答を投稿しました。
テキストエディタで、次のような小さなスクリプト(ここではmyscriptと呼びます)を作成します。
#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls
ここでの唯一のコツは、文字を^M
文字通り挿入する必要があることです。テキスト エディターに応じて、これを行うための特別なコツがあります。vi または vim ではctrl-です。emacs では-Kです。必要なものを使用してください。ctrlQ
次に、スクリプトを実行可能にします。
chmod 755 myscript
次にスクリプトを実行します./myscript
。文字で終わるファイルをリストするだけです^M
。目的どおりに動作する場合は、をxargs -0 ls
に変更しxargs -0 rm -f
、スクリプトを再度実行してファイルを削除します。