不知何故,我似乎生成了文件名中带有回车符(\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'
如何列出/查找并删除此类文件?加“?”文件名有效,所以我可以将它们一一删除,但我更喜欢一种更通用的方法。
注意:我尝试通过 Cygwin/git-bash/Linux 的 Windows 子系统在 Windows 上执行此操作,因此某些命令可能无法按预期工作。
答案1
它什么也没发现,因为-name
测试需要 shell glob 而 glob 不知道\r
。假设您的 Cygwin shell 支持$' '
符号,您可以这样做:
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