Ich möchte eine Datei mit einem komischen Namen in einen sinnvollen umbenennen, aber ich kann das 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 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?
Antwort1
Zusammenfassung der relevanten Kommentare:
Unix-Dateisysteme erlauben alle Zeichen in einem Dateinamen außer \0
(Nul) und /
(Schrägstrich). Die Tatsache, dass ls
Fragezeichen angezeigt werden, liegt nur daran, dass einige Zeichen des Dateinamens in der aktuellen Ländereinstellung nicht angezeigt werden können (was einer der Gründe ist, warumSie sollten das Parsen der Ausgabe vonls
).
Bei einer Samba-Freigabe gelten jedoch offenbar strengere Anforderungen an die Dateinamen als bei einem Standard-Unix-Dateisystem.
Da die Datei auf Ihrer temporären Samba-Freigabe einen „unzulässigen“ Namen hatte, war die Datei auf dem Computer, auf dem die Freigabe bereitgestellt wurde, unter ihrem korrekten Namen nicht zugänglich.
Dies mv
funktionierte nicht, da der von der Samba-Freigabe für die Erweiterung des Globbing-Musters zurückgegebene Name nicht der tatsächliche Name der Datei im Host-Dateisystem war, sondern nur Sambas eigene entstellte Version des Namens.
Ihre Lösung bestand darin, sich beim Server anzumelden, auf dem die Datei tatsächlich gehostet wurde (auf einem Dateisystem mit weniger restriktiven Benennungsregeln als Samba) und dort den Namen der Datei zu ändern. Dies war die richtige Vorgehensweise.
Siehe auch Unix&LinuxChatten Sie über diese Frage.
Antwort2
Bevor ich das Zitieren in Unix-Shells gelernt habe, habe ich den Emacs- dired
Modus verwendet, um schwer zuzuordnende Dateien umzubenennen oder zu löschen. Dazu öffnen Sie einfach das Verzeichnis in Emacs:
emacs -q .
... dann können Sie mit den Pfeiltasten zu der Datei navigieren, die Sie ändern möchten, und die Datei mit umbenennen R
. ?
Sie erhalten eine Liste der verfügbaren Befehle (Sie können auch schwer zuzuordnende Dateien löschen).
Dann C-x C-c
verlassen Sie einfach Emacs und sind fertig.
Antwort3
Bei ungewöhnlichen Dateinamen können Sie häufig "./" vor den Dateinamen setzen, damit Linux ihn richtig erkennt. Beispiel: $ ls ./?j?Z?R?C1_000c.jpg