Zugriff auf eine "unbenannte" Datei

1092
alk

Ich habe diese Situation in einem bestimmten Verzeichnis:

$ ls -al ... drwxr-xr-x 2 me users 8192 Juni 28 15:27 tmp -rw-r--r-- 1 me users 439 Jan. 3 2013 ... 

Wie kann ich auf den zweiten Eintrag zugreifen, der scheinbar keinen Dateinamen hat?

4
was ist mit "mv" "" newname ""? oder vielleicht besteht der Dateiname aus Leerzeichen? Versuchen Sie `ls | wc` oder ähnliches mveroone vor 10 Jahren 0
@Kwaio Sie können keine Datei mit einem leeren Namen haben, oder "mv" "" würde das leere Argument nicht erkennen. alk, kannst du ein Inode-Listing mit `ls -i` machen? Möchten Sie die Datei verschieben oder umbenennen? slhck vor 10 Jahren 1
Wie haben Sie `Juni` oder` Jan.` bekommen? Sieht nicht richtig aus. user568109 vor 10 Jahren 0
@ user568109: `Juni` und` Jan.` sind deutsch. alk vor 10 Jahren 0
Wie wurde diese Datei erstellt? https://unix.stackexchange.com/questions/66965/fileswith-lepty-names Ciro Santilli 新疆改造中心 六四事件 法轮功 vor 6 Jahren 0
@ CiroSantilli709 Hinweis: Bei Anwendung der hier genannten Lösung: https://superuser.com/questions/634632/accessing-anunnamed-file?noredirect=1#comment792292_634668 stellte sich heraus, dass der Dateiname nicht druckbar ist Zeichen. Es hatte also keinen "leeren" String (`" "`) als Namen. alk vor 6 Jahren 0

2 Antworten auf die Frage

7
Daniel Andersson

Ein Beispiellauf, um eine Datei mit dem Namen "geschützte Leerzeichen" zu erstellen und diese umzubenennen:

$ ls -1 # Each file on a separate row testfile $ touch   # I'm actually writing the character u00a0 here $ ls -1 testfile   $ ls -i # Print inodes 2031842 testfile 2023653   $ find . -maxdepth 1 -inum 2023653 -exec mv {} hithere \; $ ls -i1 2023653 hithere 2031842 testfile 

Das execin seiner Form ist nur dann sinnvoll, wenn es nur eine einzige Übereinstimmung gibt. Die Inode-Nummer sollte jedoch auf dieser Partition eindeutig sein, es sei denn, es gibt feste Links zu derselben Datei. Sie können dies testen, indem Sie zuerst find ohne Argumente ausführen, um zu sehen, ob Sie mehrere Übereinstimmungen erhalten. Wenn dies der Fall ist, können Sie das findMuster beispielsweise so verfeinern, dass es nur zu der gewünschten Datei passt.

Da die Umbenennung nicht von den genauen Zeichen des Dateinamens abhängt, sollte die Eingabe von merkwürdigen Codepunkten problemlos möglich sein.

Danke vielmals! `finden. -in-exec mv {} gatya \; `hat es geschafft. Sehen Sie sich bitte meinen Kommentar zu * jaychris * answer für Hintergrund an. alk vor 10 Jahren 0
2
jaychris

Ich würde versuchen "ls -1a> / tmp / list" und hexdump, um zu sehen, ob etwas auftaucht. Möglicherweise ist der Dateiname eine Folge von Leerzeichen und Registerkarten. Wenn der Hexdump den Dateinamen als Leerzeichen anzeigt (beispielsweise ein Leerzeichen), führen Sie einen "mv \ somename" aus.

ls -1  ls -1> / tmp / list cat / tmp / list  hexdump / tmp / list 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF  00000000 20 0A {------. mv \ new {------ ls -1 Neu 
Es stellte sich heraus, dass der Dateiname "^?" War. Um die Datei zu packen, musste ich sie jedoch umbenennen, konnte aber nicht "^?" Über die Tastatur eingeben. Daher verwendete ich erfolgreich den "Inode" -Ansatz, der von * Daniel Andersson * vorgeschlagen wurde. Danke trotzdem. alk vor 10 Jahren 0
Wenn es sich um ein Sonderzeichen wie "^?" Handelt, können Sie auch die Ausgabe von "ls" in eine Datei umleiten. Bearbeiten Sie sie so, dass sie nur den Dateinamen mit komischen Zeichen enthält, und verwenden Sie ihn in Ihrem Befehl: `mv $ (cat file) neuer_name `(Bash-Syntax, Sie können auch Backticks verwenden, aber hier kann ich keine Backticks in Backticks setzen :) Marki555 vor 8 Jahren 1
@ Marki555, warum postest du das nicht als eine andere Antwort. Es ist eine kluge und einfache Vorgehensweise. :-) alk vor 6 Jahren 0