いくつかのファイルにはファイル名の末尾に「?」が付いているので、そのようなファイルを探す必要があります

いくつかのファイルにはファイル名の末尾に「?」が付いているので、そのようなファイルを探す必要があります

これらのファイルがどのようにして作成されたのかは分かりませんが、次のような内容になっています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 のショートカット+ QCTRL+を試しましたMが、現在作業中のウィンドウが非表示になり、 が挿入されません^M

答え1

bash では、 を使用して制御文字$'\r'を挿入できます^M

find /path/with/files -name '*'$'\r'
  • inameglob式には文字が含まれていないので、これは不要です。
  • 前の名前と一致するようにアスタリスクを含める必要があります^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、スクリプトを再度実行してファイルを削除します。

関連情報