znak specjalny w nazwie pliku (\ # 033OA)


10

Mam niewielki problem z bardzo upartym błędem podczas rsync. Jest to spowodowane plikiem ze znakiem specjalnym w nazwie pliku. Były inne, ale mogłem to rozwiązać, dokonując konwersji w kodowaniu nazwy pliku. Jednak tego jednego pliku nawet nie mogę znaleźć.

Oto, co mówi rsync:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

Pierwszą rzeczą, na którą trzeba zwrócić uwagę, jest to, że kod znaków nie może być szesnastkowy ani ósemkowy, więc googolowałem i znalazłem tylko to . Może to być CURSOR UPpostać (lub nie). próbowałem

ls -la *`printf '\033OA'`*

bez skutku. Próbowałem również bezproblemowo sondować wyjście ls tego katalogu od.

Co jeszcze mogę zrobić? Albo jakiej postaci szukam?

Dzięki


1
Spróbuj ls -b, który powinien pokazywać ucieczki w stylu C
enzotib

dzięki ... pomogło ... mogło przenieść go za pomocą printf, a następnie ... jeśli ponownie opublikujesz ten komentarz jako odpowiedź, chętnie go zaakceptuję :)
luxifer

Odpowiedzi:


9

Możesz użyć -bopcji ls, która pokazuje znaki nie graficzne jako sekwencje specjalne w stylu C.


1

ls -aqwypisze wszystkie nazwy plików, ?zamiast każdego niedrukowalnego znaku. W wielu wariantach uniksowych ls -ABlub ls -Ab(sprawdź swoją stronę podręcznika) wypisuje ósemkowe znaki ucieczki. Za pomocą ls -aqmożna użyć wyświetlanego wyniku jako wzorca powłoki.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Innym sposobem na uzyskanie nazwy pliku jest użycie uzupełnienia powłoki: wprowadź mv .i naciśnij Tabkilkakrotnie, aż zostanie wstawiona dziwna nazwa.


ls -qnie pokazał pliku, ls -bale zrobił. może dlatego, że jego nazwa pliku nie była, [weird-character]OA.texale naprawdę`printf %b '\033OA'`.tex
luxifer

@luxifer Na .początku nazwy pliku znajduje się, więc potrzebujesz ls -Aqlub ls -aq. A jeśli używasz symboli wieloznacznych powłoki, musisz .jawnie powiedzieć: *nie będzie zawierać pliku, ale .*będzie.
Gilles „SO- przestań być zły”

nie, nie było! Dane wyjściowe, które opublikowałem, pochodziły z rsync i był to koniec linii. Rsync najpierw kopiuje do, $DESTINATION/.$FILENAMEzanim przeniesie plik do poprawnej nazwy. Dlatego u źródła plik nie miał .na początku swojej nazwy. Jak już powiedziano, ls -qnie pokazałbym tego pliku, podczas gdy ls -btak.
luxifer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.