Domanda

Ok, lavoro con Solaris da più di 10 anni e non l'ho mai visto...

Ho un elenco di directory che include sia un file che una sottodirectory con lo stesso nome:

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

Utilizzo file per scoprire il contenuto del file e ottengo:

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

Non sono preoccupato per il file, ma voglio mantenere la directory, quindi provo rm:

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

Quindi ecco la mia domanda in due parti:

  1. Che succede?
  2. Come posso eliminare con attenzione il file?

Jonathan

Modificare:Grazie per le risposte ragazzi, entrambi (finora) sono stati utili, ma trasmettere l'elenco a un editor ha funzionato, ala:

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

Che conteneva:

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

Fai sempre attenzione con il tasto backspace!

È stato utile?

Soluzione

Immagino che si tratti in realtà di due nomi di file diversi che "sembrano" uguali, poiché il file di comando è stato in grado di distinguerli quando la shell ha passato le versioni espanse del nome.Prova a collegare ls a od o ad un'altra utility di dump esadecimale/ottale per vedere se hanno davvero lo stesso nome o se sono coinvolti caratteri non stampabili.

Altri suggerimenti

Mi chiedo cosa potrebbe causare questo.A parte i bug del filesystem, potrebbe essere causato da un carattere non-ascii che è riuscito a passare in qualche modo.In tal caso, utilizzare un altro linguaggio con una semantica delle stringhe più semplice per eseguire l'operazione.

Sarebbe interessante vedere quale sarebbe l'output di questo snippet ruby:

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

Puoi eliminare utilizzando iNode

Se usi l'opzione "-i" in "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?

Ho un esempio (in spagnolo) di come eliminare un file utilizzando iNode su Solarishttp://sparcki.blogspot.com/2010/03/como-eliminar-archivos-utilizando-su.html

Urko,

E una rapida risposta alla seconda parte della mia domanda...

Immagino di poter rinominare la directory, eliminare il file e rinominare nuovamente la directory originale.

...Sarei comunque interessato a vedere cosa inventano gli altri.

JB

Sospetto che uno di loro abbia uno strano carattere nel nome.Potresti provare a utilizzare l'espansione dei caratteri jolly della shell per vedere che:tipo

cat msh*

e premi il tasto di espansione con caratteri jolly (nella mia shell è Ctrl-X *).Dovresti ottenere due nomi elencati, forse uno dei quali contiene un carattere di escape.

Per vedere se ci sono caratteri speciali nel tuo file, prova le opzioni -B o -Q su LS, supponendo che Solaris 8 abbia quelle opzioni.

Come un'altra soluzione per eliminare il file, è possibile visualizzare il browser grafico (GASP!) E trascinare e rilasciare il file indesiderato nella spazzatura.

Un'altra soluzione potrebbe essere quella di spostare il file con un nome diverso (quello senza il carattere speciale sconosciuto), quindi eliminare il nome della directory con caratteri speciali con caratteri jolly.

mv msheehan temp
rm mshee*
mv temp msheehan

Naturalmente, vuoi essere sicuro che solo il file che desideri eliminare corrisponda al carattere jolly.E, nel tuo caso particolare, poiché una era una directory e l'altro un file, questo comando potrebbe aver risolto tutto:

rmdir msheeha*

Un modo semplice e veloce per visualizzare i caratteri non stampabili e gli spazi bianchi è reindirizzare l'output gatto-veterinario, per esempio.:

# ls -l | cat -vet

Bello e facile da ricordare!

Per la parte 2, poiché un nome contiene due caratteri extra, puoi utilizzare:

mv sheehan abc
mv sheeha??n xyz

Una volta fatto ciò, hai di nuovo nomi di file sani, che puoi sistemare secondo le tue necessità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top