Pregunta

Ok, he estado trabajando con Solaris para un 10+ años, y nunca he visto esto...

Tengo un listado del directorio que incluye un archivo y subdirectorio con el mismo nombre:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehan
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

Yo uso el archivo para descubrir el contenido del archivo, y me sale:

bash-2.03# file msheehan
msheehan:       directory
bash-2.03# file msh*
msheehan:      ascii text
msheehan:       directory

No estoy preocupado por el archivo, pero quiero mantener el directorio, así que trato de rm:

bash-2.03# rm msheehan
rm: msheehan is a directory

Así que aquí está mi pregunta de dos partes:

  1. ¿Qué pasa con esto?
  2. ¿Cómo puedo eliminar cuidadosamente el archivo?

Jonathan

Editar:Gracias por las respuestas chicos, tanto (por ahora) fueron útiles, pero las tuberías de la lista a un editor que hizo el truco, ala:

bash-2.03# ls -l > jb.txt
bash-2.03# vi jb.txt

Que contiene:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehab^?n
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

Siempre hay que tener cuidado con la tecla de retroceso!

¿Fue útil?

Solución

Me imagino que estas son en realidad dos diferentes nombres de archivo "look" de la misma, como el archivo de comandos era capaz de distinguir cuando el shell aprobó la ampliación de las versiones del nombre en.Trate de tuberías de ls en od u otro hex/octal utilidad de volcado para ver si realmente tienen el mismo nombre, o si hay caracteres no imprimibles involucrados.

Otros consejos

Me pregunto lo que podría causar esto.Aparte de errores de sistema de archivos, podría ser causada por un no-ascii caracter que tiene a través de alguna manera.En ese caso, el uso de otro idioma más fácil de cadena semántica para hacer la operación.

Sería interesante ver lo que sería la salida de este rubí fragmento de código:

ruby -e 'puts Dir["msheehan*"].inspect'

Usted puede eliminar con el inodo

Si utiliza la opción "-i" en "ls"

$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?
20802 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a\?
$ find . -inum 20802 -exec rm {} \;
$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?

He un ejemplo (en español) ¿cómo se puede borrar un archivo con la entonces inodo en Solaris http://sparcki.blogspot.com/2010/03/como-eliminar-archivos-utilizando-su.html

Urko,

Y una rápida respuesta a la parte 2 de mi propia pregunta...

Me imagino que podría cambiar el nombre del directorio, borrar el archivo y cambiar el nombre del directorio de volver a la original de nuevo.

...Yo todavía estaría interesado en ver lo que otras personas a venir para arriba con.

JB

Tengo la sospecha de que uno de ellos tiene un extraño personaje en el nombre.Usted podría tratar de usar el comodín de la shell de expansión para ver que:tipo de

cat msh*

y pulse el comodín de expansión de clave (en mi concha es Ctrl-X *).Usted debe obtener dos nombres de la lista, tal vez uno de los cuales tiene un carácter de escape en ella.

A ver si hay caracteres especiales en su archivo, Pruebe el -b o -q opciones para ls, suponiendo solaris 8 tiene esas opciones.

Como otra solución para eliminar el archivo se puede abrir el archivo gráfico del navegador (gasp!) y arrastrar y soltar los archivos deseados a la basura.

Otra solución puede ser mover el archivo con un nombre diferente (el uno sin el desconocido de carácter especial), a continuación, elimine el carácter especial de nombre de directorio con comodines.

mv msheehan temp
rm mshee*
mv temp msheehan

Por supuesto, usted quiere estar seguro de que sólo el archivo que desea eliminar coincide con el comodín.Y, para su caso en particular, ya que era un directorio y el otro un archivo, este comando podría haber resuelto todos:

rmdir msheeha*

Una fácil y rápida manera de ver los caracteres no imprimibles y espacio en blanco es el resultado de la canalización a través de cat -vet, por ejemplo:

# ls -l | cat -vet

Agradable y fácil de recordar!

Para la parte 2, ya que hay un nombre que contiene dos caracteres adicionales, puede utilizar:

mv sheehan abc
mv sheeha??n xyz

Una vez que hayas hecho esto, tienes sane nombres de archivo de nuevo, que se puede arreglar como usted necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top