¿Cómo se crea un archivo con un nombre vacío?


9

No sé cómo, pero creé un archivo con un nombre de archivo vacío, dudo que haya un espacio en blanco allí (explicaré por qué al final):

chaouche@karabeela /mnt/ubuntu/storage $ ls
total 352K
drwx------  3 chaouche chaouche 4.0K Feb 12 11:00
drwxr-xr-x  4 chaouche chaouche 4.0K Apr 14 23:13 AUDIO
drwxr-xr-x  5 chaouche chaouche 4.0K Jul 20 22:25 BACKUPS
-rw-r--r--  1 chaouche chaouche 310K Jun 15 13:00 cv_yassine_chaouche_2012.pdf
drwxr-xr-x  2 chaouche chaouche 4.0K Jun 10 22:16 Mageia-3-i586-DVD
drwxr-xr-x  5 chaouche     1001 4.0K Oct 12  2012 MUSIQUE
drwxr-xr-x 15 chaouche chaouche 4.0K Oct 27  2012 PARISVIII
drwxr-xr-x  6 chaouche chaouche 4.0K Jun 12 18:33 SABAYON
drwxr-xr-x  5 chaouche chaouche 4.0K Jun 15 13:23 SIFTECH
drwxr-xr-x  5 chaouche chaouche 4.0K Feb  6 15:11 TOILES
drwxr-xr-x  4 chaouche chaouche 4.0K Jul 17 17:21 VIDEOS
chaouche@karabeela /mnt/ubuntu/storage $

Le pregunté a #linux cómo eliminar el archivo y una persona sugirió que quitara todos los demás archivos y luego usara la pestaña de finalización, lo que dio un comportamiento muy interesante:

# with tab completion
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 45M
-rwxr-xr-x  1 chaouche chaouche  34M Jan 16  2013 inkscape-0.48.4-1-win32.exe
-rwxr-xr-x  1 chaouche chaouche 8.6M Feb  4 11:42 mypaint-1.0.0-win32-installer.exe
-rwxr-xr-x  1 chaouche chaouche 2.7M Jan 17  2013 pdftkb_setup.exe

# without tab completion, wrote "/" by hand
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 212K
-rw-r--r--   1 root root    0 Apr 15  2012 1
drwxr-xr-x   2 root root 4.0K Dec  9  2012 bin
drwxr-xr-x   3 root root 4.0K Jun 15 12:10 boot
-rw-------   1 root root  74K Jul  1  2011 dead.letter
drwxr-xr-x  19 root root 4.2K Jul 20 20:14 dev
drwxr-xr-x 117 root root  12K Jul 20 21:30 etc
drwxr-xr-x   4 root root 4.0K Jun 12 18:40 home
drwxr-xr-x   2 root root 4.0K Jun  8  2011 initrd
drwxr-xr-x  20 root root  12K Dec  9  2012 lib
drwx------   2 root root  16K Jun  7  2011 lost+found
drwxr-xr-x   4 root root 4.0K Jul  3 01:56 media
drwxr-xr-x   9 root root 4.0K Apr 15 00:06 mnt
drwxr-xr-x   8 root root 4.0K Jun 30 23:19 opt
dr-xr-xr-x 198 root root    0 Jun 15 13:10 proc
drwxr-x---  28 root root 4.0K Jul 20 21:42 root
drwxr-xr-x   2 root root  12K Dec  9  2012 sbin
drwxr-xr-x   2 root root 4.0K Apr  3  2011 srv
drwxr-xr-x  12 root root    0 Jun 15 13:10 sys
-rw-r--r--   1 root root    0 Jun 12 18:40 thisismageia
drwxrwxrwt  69 root root  36K Jul 20 22:04 tmp
drwxr-xr-x  14 root root 4.0K Nov  6  2011 usr
drwxr-xr-x  18 root root 4.0K Jul  2  2011 var
chaouche@karabeela /mnt/ubuntu/storage $

Si hubiera un espacio en blanco en el nombre del archivo, habría sido reemplazado por \ "" cuando presioné la tecla de tabulación, pero no fue así.


55
Es un directorio, no un archivo, aparentemente contiene tres archivos.
Bananguin

2
Suponiendo que todavía ha mantenido el directorio donde movió todo menos el archivo vacío, ¿qué sucede cuando lo hago file *?
Joseph R.

No, desafortunadamente he cambiado el nombre del archivo con el comando mv.
ychaouche


2
Esta pregunta no es un duplicado de esa.  Esta pregunta trata sobre técnicas prácticas para tratar con un archivo (o directorio) creado accidentalmente cuyo nombre no contiene caracteres de impresión.  Esa otra pregunta es una discusión teórica, hipotética y divagante sobre las formas en que podría crear tal archivo si lo desea, y no dice nada sobre cómo lidiar con las consecuencias.
G-Man dice 'Restablecer a Monica' el

Respuestas:


14

No es posible tener un archivo con un nombre vacío. Lo que tiene es un archivo cuyo nombre consiste completamente en caracteres en blanco o no imprimibles.

Para ver exactamente cuál es el nombre del archivo, ejecute LC_CTYPE=C ls -b. Esto reemplaza todos los caracteres en blanco o no imprimibles por escapes octales. Por ejemplo, un archivo cuyo nombre es un espacio único de ancho cero se enumeraría como \342\200\213.

Puede aislar este archivo con un globo que excluye los archivos con un buen nombre. Por ejemplo, podría intentar enumerar los archivos cuyo nombre no comienza con una letra.

chaouche@karabeela /mnt/ubuntu/storage $ ls -d [^A-Za-z]*

No olvide la opción -d, de modo que lsenumera el directorio en sí y no su contenido.

Debe cambiar el nombre del archivo para que tenga un nombre razonable. Puede confiar en la finalización de su shell o usar un globo que solo coincida con este archivo.

mv [^A-Za-z]* windows-programs

5

Podría ser un directorio con solo espacios o caracteres que no se imprimen en el nombre. Además, parece que solo tiene una entrada, que no sea '.' y '..', por lo que ve el '3' en la segunda columna de la salida de su primer comando. Se podría utilizar siempre statpara imprimir el nombre del directorio, con: stat -f "'%N'" *. Si no se puede imprimir, es posible que tenga que canalizarlo cat -vo od -cver qué es realmente.

Para eliminarlo, probablemente tendrá que ejecutar rmdir -- 'dirname'(reemplace 'dirname' con el nombre del directorio. Es posible que necesite usar globs si tiene nombres no imprimibles), aunque como dije antes, parece tener contenido para que pueda Tendré que descender a ese directorio con cd -- 'dirname'y examinar su contenido.

Te sugiero que evites usarlo rm -rfa toda costa, ya que el problema del nombre del directorio es fácil de confundir.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.