Benennen Sie die Datei mit dem seltsamen Namen auf dem Samba-Mount um

10

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?

grauer Wolf
quelle
1
Was ist die Ausgabe eines einfachen lsin diesem Verzeichnis? Wird die Datei als reguläre Datei angezeigt? Ich möchte sicherstellen, dass No such file or directoryes sich um einen Globbing-Fehler handelt, der nicht auf ein beschädigtes Dateisystem hinweist.
Terdon
1
Ich frage mich, ob das Dateisystem durchlaufen werden muss fsck. Ich kann beschädigt sein. Wie hat die Datei diesen Namen erhalten?
Kusalananda
1
@Mioriin Die Fragezeichen im Dateinamen sind (oder können) Platzhalter für Zeichen, die nicht angezeigt werden können. (Ein Grund, die Ausgabe von nie zu analysieren ls)
Kusalananda
1
Dies kann ein Problem mit der Terminalschriftart sein. Es wird ?für Buchstaben angezeigt, die nicht angezeigt werden können. Versuchen Sie, zu einer vollständigen Unicode-Schriftart zu wechseln.
Mio Rin
5
@Mioriin Ob der Dateiname angezeigt werden kann oder nicht, ist in diesem Fall ein roter Hering, denke ich. Was seltsam ist , dass die Schale der Lage ist , zu erweitern , *_000c.jpgaber das mvkann 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.
Kusalananda

Antworten:

16

Zusammenfassung der relevanten Kommentare:

Unix-Dateisysteme erlauben alle Zeichen in einem Dateinamen außer \0(nul) und /(Schrägstrich). Die Tatsache, dass lsFragezeichen 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 mvhat 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 .

Kusalananda
quelle
-2

Bevor ich etwas über das Zitieren in Unix-Shells gelernt habe, habe ich den Emacs- diredModus verwendet, um schwer übereinstimmende Dateien umzubenennen oder zu löschen. Sie öffnen einfach das Verzeichnis in emacs:

emacs -q .

... 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-caus Emacs heraus und fertig.

Jim K.
quelle
-3

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

Bootbeast
quelle