なぜかファイル名にキャリッジリターン(\ r)を含むファイルを生成するようです。
$ ls -1 tri-rods.tm.dat*
tri-rods.tm.dat
'tri-rods.tm.dat'$'\r'
$ ls tri-rods.tm.dat?
'tri-rods.tm.dat'$'\r'
「\r」で検索しようとしましたが、何も見つかりませんでした。
$ find . -type f -name '*\r'
そのようなファイルをどのようにリスト/検索して削除できますか?ファイル名に "?"を追加すると、1つずつ削除できますが、より一般的なアプローチを好みます。
注:Windowsでは、Cygwin / git-bash / Linux用のWindowsサブシステムを介してこれを実行しようとしているため、一部のコマンドが期待どおりに機能しない可能性があります。
答え1
-name
テストにはシェルグロブが必要で、グロブはこれについて知らないため、何も見つかりませんでした\r
。 Cygwinシェルがシンボルを$' '
サポートしていると仮定すると、次のことができます。
find . -name '*'$'\r''*'
したがって、削除するには、次のことができます。
find . -name '*'$'\r''*' -delete
または、find
対応する操作がない場合は、-delete
次を使用します。
find . -name '*'$'\r''*' -exec rm {} +
この-regex
テストは最良の選択肢のようですが、残念ながら正規表現スタイルのどれもfind
バックスラッシュ文字エスケープの理解をサポートしていません(この回答):
$ find . -regextype findutils-default -regex '.*\r.*'
$ find . -regextype ed -regex '.*\r.*'
$ find . -regextype emacs -regex '.*\r.*'
$ find . -regextype gnu-awk -regex '.*\r.*'
$ find . -regextype grep -regex '.*\r.*'
$ find . -regextype posix-awk -regex '.*\r.*'
$ find . -regextype awk -regex '.*\r.*'
$ find . -regextype posix-basic -regex '.*\r.*'
$ find . -regextype posix-egrep -regex '.*\r.*'
$ find . -regextype egrep -regex '.*\r.*'
$ find . -regextype posix-extended -regex '.*\r.*'
$ find . -regextype posix-minimal-basic -regex '.*\r.*'
$ find . -regextype sed -regex '.*\r.*'
最初のものだけが$'\r'
私のために働いた。
$ find . -name '*'$'\r''*'
./bad?file