Zmień nazwę pliku o dziwnej nazwie na Sambie

10

Chcę zmienić nazwę pliku z dziwną nazwą na coś rozsądnego, jednak nie jestem w stanie: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Próbowałem użyć numeru i-węzła, jak zalecono w kilku miejscach w Internecie:

$ 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

Co powinienem zrobić?

szary Wilk
źródło
1
Jakie są wyniki działania prostego lsw tym katalogu? Czy plik jest wyświetlany jako zwykły plik? Proszę o upewnienie się, że No such file or directoryjest to błąd globowania i nie świadczy o uszkodzeniu systemu plików.
terdon
1
Zastanawiam się, czy system plików wymaga uruchomienia fsck? Mogę być zepsuty. W jaki sposób plik uzyskał tę nazwę?
Kusalananda
1
@Mioriin Znaki zapytania w nazwie pliku są (lub mogą być) symbolami zastępczymi dla znaków, których nie można wyświetlić. (jeden powód, aby nigdy nie analizować wyników ls)
Kusalananda
1
Może to być problem z czcionką terminalową. Pokazuje ?litery, których nie można wyświetlić. Spróbuj przełączyć się na czcionkę w pełni Unicode.
Mio Rin,
5
@Mioriin To, czy nazwa pliku może być wyświetlana, to trochę czerwony śledź w tym przypadku. Dziwne jest to, że powłoka może się rozszerzać, *_000c.jpgale mvwtedy nie może przetworzyć pliku. Oznacza to, IMHO, uszkodzenie systemu plików. ... lub ewentualnie systemu plików zamontowanego na udziale sieciowym, który zniknął (z wciąż buforowanymi wpisami katalogu), lub coś w tym rodzaju.
Kusalananda

Odpowiedzi:

16

Podsumowanie odpowiednich komentarzy:

Systemy plików Unix pozwalają na dowolny znak w nazwie pliku oprócz \0(nul) i /(ukośnik). Fakt, że lswyświetlane są znaki zapytania, jest tylko dlatego, że nie może wyświetlić niektórych znaków nazwy pliku w bieżących ustawieniach narodowych (co jest jednym z powodów, dla których należy unikać analizowania wynikuls ).

Jednak w przypadku udziału Samba najwyraźniej masz bardziej rygorystyczne wymagania dotyczące nazw plików niż w przypadku standardowego systemu plików Unix.

Ponieważ plik miał nazwę, która była „nielegalna” na pośrednim udziale Samby, plik był niedostępny z powodu prawidłowej nazwy na komputerze montującym udział.

mvNie działa, ponieważ nazwa wrócił z udziału Samba dla ekspansji wzór globowania nie była rzeczywista nazwa pliku w systemie plików hosting, tylko Samba własnej zniekształconej wersji nazwy.

Rozwiązaniem było zalogowanie się na serwerze, który faktycznie hostował plik (w systemie plików z mniej restrykcyjnymi regułami nazewnictwa niż Samba) i zmiana tam nazwy pliku. To był właściwy sposób działania.

Zobacz także czat Unix i Linux na ten temat .

Kusalananda
źródło
-2

Zanim dowiedziałem się o cytowaniu w powłokach unixowych, używałbym diredtrybu emacsa do zmiany nazwy lub usuwania trudnych do dopasowania plików. Po prostu otwórz katalog w emacs:

emacs -q .

... możesz użyć klawiszy strzałek, aby przejść do pliku, który chcesz zmodyfikować, i zmienić nazwę pliku R. ?poda ci listę dostępnych poleceń (możesz również usunąć pliki, które są trudne do dopasowania).

Potem właśnie C-x C-cwychodzisz z Emacsa i gotowe.

Jim K.
źródło
-3

Często w przypadku nietypowych nazw plików można dodać „./”, zanim nazwa pliku zostanie rozpoznana przez system Linux. Na przykład: $ ls ./?j?Z?R?C1_000c.jpg

bootbeast
źródło