19 votos

¿Cómo eliminar un archivo cuyo nombre parece ser "." en un recurso compartido SMB?

Visión general

La especificación incorrecta de un argumento en una herramienta de línea de comandos (detalles a continuación) ha dado lugar a la creación de un archivo literalmente nombrado ".". Ya he descubierto que intentar eliminarlo directamente en Finder provocará la eliminación de todo el contenido de la carpeta que lo contiene (afortunadamente, esta es una carpeta temporal), pero aún no elimina el archivo "." en sí. Además, no se pueden eliminar con éxito las carpetas que contienen este archivo, ya sea con Finder o desde la terminal de bash/zsh.

¿Cómo se puede eliminar (o cambiar el nombre) realmente un archivo así?


Intentos de eliminar desde zsh

Por ejemplo:

mytmp % ls -hal
total 65
drwx------  1 user  staff    16K Aug 21 11:20 .
-rwx------  1 user  staff     0B Aug 21 09:51 .
drwx------  1 user  staff    16K Aug 16 16:30 ..

mytmp % ls -aB
.   .   ..

mytmp % rm -rf '.'                   
rm: "." y ".." no pueden ser eliminados

mytmp % cd ..

scratch % rm -rf mytmp
rm: mytmp: Permiso denegado

scratch % sudo rm -rf mytmp
rm: mytmp: Permiso denegado

También he intentado variaciones sin -r, ya que realmente es la versión no directiva la que se debe eliminar.

También probé la sugerencia de @bmike de usar el nodo-i. Aunque podemos identificar el nodo-i, la eliminación no parece funcionar:

scratch % ls -ila mytmp
total 65
8056451580272514705 drwx------  1 user  staff  16384 Aug 21 11:20 .
8652239633868421122 -rwx------  1 user  staff      0 Aug 21 09:51 .
                  2 drwx------  1 user  staff  16384 Aug 21 11:43 ..

scratch % find mytmp -inum 8652239633868421122 -delete

## no hay cambios
scratch % ls -ila mytmp
total 65
8056451580272514705 drwx------  1 user  staff  16384 Aug 21 11:20 .
8652239633868421122 -rwx------  1 user  staff      0 Aug 21 09:51 .
                  2 drwx------  1 user  staff  16384 Aug 21 11:43 ..

¿Realmente se llama "."?

@nohillside propuso delimitar las listas con x y y para ver si realmente se llama ".". Desde bash:

bash-3.2$ for i in .*; do echo x${i}y; done
x.y
x.y
x..y

Parece que sí.

@fd0 sugirió imprimir caracteres no imprimibles con cat -vet. Desde bash:

bash-3.2$ ls -1a | cat -vet
.$
.$
..$

Nuevamente, parece que se llama de manera idéntica.

@nohillside sugirió ejecutar un servidor de Python desde el directorio y mostrar su lista de directorios:

La lista de directorios del servidor de Python está vacía

¿Es "." realmente ese punto?

Podemos imprimir en octal para ver que es lo mismo que el punto que representa "este directorio":

bash-3.2$ ls -a | od -cb
0000000    .  \n   .  \n   .   .  \n                                    
          056 012 056 012 056 056 012                                    
0000007

Además, el comportamiento reportado arriba de Finder debería indicar que se interpreta como ese punto.


Antecedentes adicionales

La carpeta está en un Volumen de red, formato SMB (OS X).

La herramienta que resultó en esto fue haplogrep, una CLI basada en Java. Se puede instalar a través de Conda mediante

conda install -c conda-forge -c bioconda haplogrep

La suborden utilizada fue haplogrep classify, que tiene las siguientes opciones:

mytmp % haplogrep classify

mtDNA Haplogroup Classifiction v2.4.0
https://github.com/seppinho/haplogrep-cmd
(c) Sebastian Schönherr, Hansi Weissensteiner, Lukas Forer, Dominic Pacher
sebastian.schoenherr@i-med.ac.at

[classify]
Opciones requeridas faltantes: '--input=', '--output=', '--format='
Uso: haplogrep classify [--chip] [--extend-report] [--rsrs]
                          [--skip-alignment-rules] [--write-fasta]
                          [--write-fasta-msa] --format=
                          [--hetLevel=] [--hits=] --in=
                          [--lineage=] [--metric=] --out=
                          [--phylotree=]
      --chip                Datos VCF de un chip de genotipo
                              Por defecto: false
      --extend-report       Agrega una bandera para una salida final extendida
                              Por defecto: false
      --format=     Especificar formato de archivo de entrada: vcf, fasta o hsd
      --hetLevel= Agrega heteroplasmias con un nivel > X del archivo VCF
                              al perfil (por defecto: 0.9)
      --hits=         Calcular los mejores n resultados
      --in, --input=    Archivo de entrada VCF, fasta o hsd
      --lineage=   Exportar información de linaje como archivo de puntos, \n0=no
                              árbol, 1=con SNPs, 2=solo estructura, sin SNPs
      --metric=     Especificar otros métricos (hamming o jaccard) que
                              no sean el predeterminado (kulczynski)
      --out, --output= Ubicación del archivo de salida
      --phylotree=    Especificar versión de phylotree
      --rsrs                Usar versión de RSRS
                              Por defecto: false
      --skip-alignment-rules
                            Omitir arreglos de nomenglatura de mtDNA basados en reglas para
                              importación de FASTA
                              Por defecto: false
      --write-fasta         Escribir resultados en formato fasta
                              Por defecto: false
      --write-fasta-msa     Escribir alineación múltiple de secuencias (_MSA.fasta)
                              Por defecto: false

Interpreté incorrectamente la descripción de "Ubicación del archivo de salida" del argumento --out como que pedía una ruta, lo que me llevó a usar --out . y así resultar en la creación de un archivo llamado ".".

Cambio de nombre

El archivo mismo no se puede cambiar de nombre en Finder o con mv, sin embargo, la carpeta que lo contiene se puede cambiar de nombre.

14voto

Como esto está en una unidad montada SMB, el archivo problemático debe ser eliminado en el sistema de origen (el servidor que comparte la unidad). El archivo seguramente está nombrado de manera extraña para que el protocolo SMB lo represente como ., pero no hay manera de usar SMB para eliminar realmente el archivo.

9voto

Linc D. Puntos 11

Me estoy colando en esta fiesta. La información esencial aquí parece ser que el siguiente comando falla con un error de permisos, aunque no hay una razón obvia por la que debería:

rm -rf mytmp

Creo que esto significa que el ejecutable 'haplogrep' de alguna manera logró crear un archivo con un nombre ilegal, corrompiendo así el directorio de volumen. Si ese es el caso, ningún esfuerzo en la terminal o en el Finder podrá solucionarlo. Por lo tanto, deberías ejecutar 'First Aid' en el volumen en Utilidad de Discos y esperar lo mejor. De no funcionar, es posible que tengas que borrar el volumen y restaurar todo lo demás desde una copia de seguridad.

Actualización: Esta respuesta fue publicada antes de que se revelara que el volumen en cuestión es un recurso compartido de red. La solución no es aplicable.

3voto

Lo más probable es que no se llame . porque ese es un nombre reservado. Si estas son las únicas tres entradas de directorio, intenta rm -i .* y omite ...

2voto

mmigdol Puntos 715

Puede que estés viendo algo con codificación UTF-8: hay más de un carácter de punto en el mundo. No soy usuario de OSX, pero tal vez puedas hacer algo así desde linux:

# ls -al | od -c
0000000   t   o   t   a   l       6   0  \n   -   r   w   -   r   -   -
0000020   r   -   -       1       r   o   o   t       r   o   o   t    
0000040       1   3   9   1       A   u   g       2   3       1   2   :
0000060   0   1       c   a   .   c   r   t  \n   -   r   w   -   -   -
0000100   -   -   -   -       1       r   o   o   t       r   o   o   t
0000120           1   8   7   4       A   u   g       2   3       1   2
0000140   :   0   1       c   a   .   k   e   y  \n   -   r   w   -   r
0000160   -   -   r   -   -       1       r   o   o   t       r   o   o
0000200   t                   4   1       A   u   g       2   3       1
0000220   2   :   0   1       c   a   .   s   r   l  \n   d   r   w   x
0000240   r   -   x   r   -   x       2       r   o   o   t       r   o
0000260   o   t           4   0   9   6       N   o   v       1   1    
0000300       2   0   2   3       c   l   i   e   n   t   /  \n   -   r
0000320   w   -   r   -   -   r   -   -       1       r   o   o   t    
0000340   r   o   o   t               4   2   4       A   u   g       2
0000360   3       1   2   :   0   1       d   h   2   0   4   8   .   p
0000400   e   m  \n   d   r   w   x   r   -   x   r   -   x       2    
0000420   r   o   o   t       r   o   o   t           4   0   9   6    
0000440   N   o   v       1   1           2   0   2   3       s   e   r
0000460   v   e   r   /  \n   -   r   w   -   r   -   -   r   -   -    
0000500   1       r   o   o   t       r   o   o   t               5   9
0000520   9       A   u   g       2   3       1   3   :   5   0       s
0000540   e   r   v   e   r   .   c   o   n   f  \n   -   r   w   -   r
0000560   -   -   r   -   -       1       r   o   o   t       r   o   o
0000600   t       1   0   8   8   2       A   u   g       2   3       1
0000620   1   :   5   8       s   e   r   v   e   r   .   c   o   n   f
0000640   .   b   k  \n   -   r   w   -   r   -   -   r   -   -       1
0000660       r   o   o   t       r   o   o   t           1   2   6   9
0000700       A   u   g       2   3       1   2   :   0   1       s   e
0000720   r   v   e   r   .   c   r   t  \n   -   r   w   -   r   -   -
0000740   r   -   -       1       r   o   o   t       r   o   o   t    
0000760       1   0   6   6       A   u   g       2   3       1   2   :
0001000   0   1       s   e   r   v   e   r   .   c   s   r  \n   -   r
0001020   w   -   -   -   -   -   -   -       1       r   o   o   t    
0001040   r   o   o   t           1   7   0   4       A   u   g       2
0001060   3       1   2   :   0   1       s   e   r   v   e   r   .   k
0001100   e   y  \n   -   r   w   -   -   -   -   -   -   -       1    
0001120   r   o   o   t       r   o   o   t               6   3   6    
0001140   A   u   g       2   3       1   2   :   0   1       t   a   .
0001160   k   e   y  \n   -   r   w   x   r   -   x   r   -   x       1
0001200       r   o   o   t       r   o   o   t           1   4   6   8
0001220       N   o   v       1   1           2   0   2   3       u   p
0001240   d   a   t   e   -   r   e   s   o   l   v   -   c   o   n   f
0001260  \n
0001261

od -c muestra tu resultado como caracteres normales, si son imprimibles, o códigos de escape de lo contrario; alternativamente, od -x mostrará un volcado en hexadecimal.

1voto

Rich Puntos 2429

Dado que el único archivo problemático restante es un archivo normal, simplemente escribe:

find . -name "*" -type f -exec echo "{}" \; | od -cx

Verás la cadena de caracteres antes o después del . en este nombre de archivo dentro de la salida de od como caracter y hexa. Por ejemplo un espacio, un salto de línea, un retorno de carro, un tabulador, un timbre, una retroceso (peor?). Apostaría por un meta-espacio (mi pulgar izquierdo le gusta hacerme esta estúpida broma).

Solo por curiosidad, cuéntanos cuál era ese (esos) caracter(es) no visible(s) :).

Luego usa el mismo truco para eliminarlo:

find . -name "*" -type f -exec rm "{}" \;

Finalmente conseguí una solución más sencilla:

vi .

ve a la línea donde está el archivo sucio, si no puedes ver nada extraño presiona :l para ver un espacio, un retorno o cualquier otro caracter extraño. Luego presiona D para eliminarlo, confirma con un y, sal con :q, sonríe.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X