Ich möchte eine Datei mit einem seltsamen Namen in einen vernünftigen Namen umbenennen, kann jedoch nicht: /
$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory
Ich habe versucht, die Inode-Nummer zu verwenden, wie es an einigen Stellen im Internet empfohlen wurde:
$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21 2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory
Was soll ich machen?
ls
in diesem Verzeichnis? Wird die Datei als reguläre Datei angezeigt? Ich möchte sicherstellen, dassNo such file or directory
es sich um einen Globbing-Fehler handelt, der nicht auf ein beschädigtes Dateisystem hinweist.fsck
. Ich kann beschädigt sein. Wie hat die Datei diesen Namen erhalten?ls
)?
für Buchstaben angezeigt, die nicht angezeigt werden können. Versuchen Sie, zu einer vollständigen Unicode-Schriftart zu wechseln.*_000c.jpg
aber dasmv
kann die Datei nicht verarbeiten. Dies ist meiner Meinung nach ein Hinweis auf ein beschädigtes Dateisystem. ... oder möglicherweise eines Dateisystems, das auf einer Netzwerkfreigabe bereitgestellt ist, die nicht mehr vorhanden ist (wobei die Verzeichniseinträge noch zwischengespeichert sind), oder so.Antworten:
Zusammenfassung der relevanten Kommentare:
Unix-Dateisysteme erlauben alle Zeichen in einem Dateinamen außer
\0
(nul) und/
(Schrägstrich). Die Tatsache, dassls
Fragezeichen angezeigt werden, liegt nur daran , dass einige der Zeichen des Dateinamens im aktuellen Gebietsschema nicht angezeigt werden können (was einer der Gründe ist, warum Sie das Parsen der Ausgabe von vermeiden solltenls
).Bei einer Samba-Freigabe gelten jedoch anscheinend strengere Anforderungen an Dateinamen als an ein Standard-Unix-Dateisystem.
Da die Datei auf Ihrer Samba-Zwischenfreigabe einen "illegalen" Namen hatte, konnte auf den Computer, auf dem die Freigabe bereitgestellt wurde, nicht auf den korrekten Namen zugegriffen werden.
Das
mv
hat nicht funktioniert, da der Name, der von der Samba-Freigabe für die Erweiterung des Globbing-Musters zurückgegeben wurde, nicht der tatsächliche Name der Datei im Hosting-Dateisystem war, sondern nur Sambas eigene verstümmelte Version des Namens.Ihre Lösung bestand darin, sich bei dem Server anzumelden, auf dem die Datei tatsächlich gehostet wurde (auf einem Dateisystem mit weniger restriktiven Namensregeln als Samba) und dort den Namen der Datei zu ändern. Dies war die richtige Vorgehensweise.
Siehe auch den Unix- und Linux- Chat zu dieser Frage .
quelle
Bevor ich etwas über das Zitieren in Unix-Shells gelernt habe, habe ich den Emacs-
dired
Modus verwendet, um schwer übereinstimmende Dateien umzubenennen oder zu löschen. Sie öffnen einfach das Verzeichnis in emacs:... dann können Sie mit den Pfeiltasten zu der Datei navigieren, mit der Sie die Datei ändern und umbenennen möchten
R
.?
gibt Ihnen die Liste der verfügbaren Befehle (Sie können auch Dateien löschen, die schwer zu finden sind).Dann bist du einfach
C-x C-c
aus Emacs heraus und fertig.quelle
Bei ungewöhnlichen Dateinamen können Sie häufig "./" hinzufügen, bevor der Dateiname und Linux ihn richtig erkennen. Zum Beispiel: $ ls ./?j?Z?R?C1_000c.jpg
quelle