Я понятия не имею, как появились эти файлы, но вот как они выглядят 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"
, но не получилось. Я пытался сбежать с \
, но все еще нет кубиков. Я SSH вРХЕЛмашина с использованием MobaXTerm, поэтому я попробовал сочетание клавиш Windows CTRL+ 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- K. В emacs это ctrl- Q. Используйте то, что нужно.
Затем сделайте скрипт исполняемым:
chmod 755 myscript
Затем выполните скрипт ./myscript
. Он должен просто перечислить файлы, заканчивающиеся на ^M
символ. Если он делает то, что вам нужно, измените на xargs -0 ls
и xargs -0 rm -f
выполните скрипт еще раз, чтобы удалить файлы