No tengo idea de cómo surgieron estos archivos, pero así es como se ven 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
Cuando uso ls para que el nombre del archivo se complete automáticamente, se ve así:
ls /path/to/file/test_some_data_S6_R2.fastq.gz^M
^M
se supone que es retorno de operador en DOS, por lo que mi mejor suposición es que alguien podría haber copiado el nombre de un sistema Windows y haberlo usado para nombrar el archivo. Hay muchos métodos para reemplazar ^M
el contenido del archivo, pero en mi caso quiero buscar archivos con ^M
su nombre.
Lo intenté find /path/with/files/ -iname "^M"
, pero no tuve suerte. Intenté escapar con \
, pero todavía no había dados. Estoy haciendo SSH en unRHELmáquina que usa MobaXTerm, así que probé el acceso directo de Windows CTRL+ Q, CTRL+ M, pero oculta la ventana de trabajo actual y no inserta ^M
.
Respuesta1
En bash, puedes usar $'\r'
para insertar el ^M
carácter de control.
find /path/with/files -name '*'$'\r'
iname
no es necesario ya que la expresión global no contiene letras- Se debe incluir un asterisco para que coincida con el nombre antes del
^M
Incluso pude ingresar ^M
directamente a una línea de comando bash mediante la combinación de Ctrl + v Ctrl + m. La clave real podría depender de bind
su asignación quoted-insert
.
find /path/with/files -name '*^M'
Respuesta2
Aquí hay una pequeña variación del método que@choroba publicó en su respuesta.
En un editor de texto, cree un pequeño script (aquí llamado myscript) que se ve así
#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls
El único truco aquí es que debes insertar el carácter ^M
literalmente, y existen trucos especiales para hacerlo según el editor de texto. En vi o vim es ctrl- K. En emacs es ctrl- Q. Utilice lo que sea necesario.
Luego haga que el script sea ejecutable:
chmod 755 myscript
Luego ejecute el script ./myscript
. Sólo debería enumerar los archivos que terminan con el ^M
carácter. Si hace lo que desea, cambie xargs -0 ls
y xargs -0 rm -f
ejecute el script nuevamente para eliminar los archivos.