Datei- und Verzeichnis mit demselben Namen in demselben übergeordneten Verzeichnis - Solaris 8, ufs

StackOverflow https://stackoverflow.com/questions/83156

Frage

Ok, ich habe für ein 10 + Jahre mit Solaris gearbeitet und habe noch nie gesehen ...

Ich habe ein Verzeichnis, das sowohl eine Datei und Unterverzeichnis mit dem gleichen Namen enthält:

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

Ich benutze Datei Inhalt der Datei zu entdecken, und ich:

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

Ich bin nicht besorgt über die Datei, aber ich mag das Verzeichnis halten, so dass ich versuche rm:

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

So, hier ist meine zwei Teil Frage:

  1. Was ist los mit diesem?
  2. Wie sorgfältig ich die Datei löschen?

Jonathan

Edit: Danke für die Antworten Jungs, beide (bisher) waren hilfreich, aber kochend die Auflistung einen Editor hat den Trick, ala:

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

Welche enthalten:

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

Seien Sie immer vorsichtig mit dem Rücktaste!

War es hilfreich?

Lösung

Ich würde vermuten, dass diese in der Tat zwei verschiedene Dateinamen sind, dass „Look“ die gleiche, wie die Befehlsdatei der Lage war, sie zu unterscheiden, wenn die Schale die erweiterten Versionen des Namens in geben. Rohrleitungen ls in od oder einem anderen hex Versuchen / oktal-Dump-Dienstprogramm, um zu sehen, ob sie wirklich die gleichen Namen haben, oder wenn es nicht druckbare Zeichen beteiligt sind.

Andere Tipps

Ich frage mich, was dieses verursachen könnte. Abgesehen von Dateisystem-Fehlern, könnte es durch einen nicht-ascii chararacter verursacht werden, die durch irgendwie bekam. In diesem Fall verwenden Sie eine andere Sprache mit einfacher String Semantik der Operation zu tun.

Es wäre interessant zu sehen, was die Ausgabe dieses Rubin-Schnipsel sein würde:

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

Sie können mit dem Inode löschen

Wenn Sie die Option "-i" in "ls" verwenden

$ 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?

Ich habe ein Beispiel (in Spanisch), wie Sie eine Datei mit löschen iNode dann auf Solaris http://sparcki.blogspot.com/2010/03 /como-eliminar-archivos-utilizando-su.html

Urko,

Und eine schnelle Antwort auf Teil 2 meine Frage ...

Ich könnte mir vorstellen, ich das Verzeichnis umbenennen könnte, um die Datei löschen, und benennen Sie das Verzeichnis zurück, um es wieder original ist.

... Ich würde immer noch daran interessiert zu sehen, was andere Leute kommen mit.

JB

Ich vermute, dass einer von ihnen ein seltsames Zeichen im Namen hat. Sie könnten versuchen, die Shell-Wildcard-Erweiterung verwenden, um zu sehen, dass: type

cat msh*

und drücken Sie die Wildcard-Erweiterungsschlüssel (in meinem Shell ist es Strg-X *). Sie sollten zwei Namen aufgelistet bekommen, vielleicht einer von denen in ihm ein Escape-Zeichen hat.

Um zu sehen, ob es Sonderzeichen in der Datei, führen Sie die -b oder -q Optionen ls, solaris 8 hat diese Optionen übernehmen.

Als eine andere Lösung, die Datei zu löschen Sie die grafische Datei-Browser bringen kann (Keuchen!) Und zieht die unerwünschte Datei in den Papierkorb.

Eine andere Lösung könnte darin bestehen, die eine Datei in einen anderen Namen zu bewegen (das eine ohne das unbekannte Sonderzeichen), dann den speziellen Namen Zeichenverzeichnis mit Wildcards löschen.

mv msheehan temp
rm mshee*
mv temp msheehan

Natürlich wollen Sie sicher sein, dass nur die Datei, die Sie löschen möchten, die Platzhalter entspricht. Und für Ihren speziellen Fall, da man ein Verzeichnis und die andere eine Datei war, könnte dieser Befehl gelöst haben sie alle:

rmdir msheeha*

Eine schnelle und einfache Möglichkeit, nicht druckbare Zeichen und Leerzeichen zu sehen, mit dem Rohr ist die Ausgabe durch cat -vet , z.

# ls -l | cat -vet

Nizza und leicht zu merken!

Für Teil 2, da ein Name zwei zusätzliche Zeichen enthält, können Sie verwenden:

mv sheehan abc
mv sheeha??n xyz

Wenn Sie das getan haben, haben Sie wieder gesund Dateinamen bekommen, dass Sie beheben können, wie Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top