спеціальний символ у назві файлу (\ # 033OA)


10

У мене незначна проблема з дуже впертою помилкою під час rsync. Це викликано файлом із спеціальним символом у своєму імені. Були й інші, але я міг це розібратися, зробивши певну конверсію в кодуванні імені файлу. Однак цього файлу я навіть не можу знайти.

Отже ось що говорить rsync:

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

Перше , що кидається в очі , це те , що код символу не може бути шестигранною або вісімкове тому я гуглі його і тільки знайшов це . Так це може бути CURSOR UPперсонаж (чи ні). Я намагався

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

безрезультатно. Я також спробував odбезрезультатно відключити вихід ls цього каталогу .

Що ще можу зробити? Або якого персонажа я шукаю все-таки?

Дякую


1
Спробуйте ls -b, що має показувати втечі у стилі С
enzotib

дякую ... що допомогло ... міг би перемістити його за допомогою printf тоді ... якщо ви перепублікуєте цей коментар як відповідь, я з радістю прийму його :)
luxifer

Відповіді:


9

Ви можете скористатися -bопцією до ls, яка показує не графічні символи як послідовності втечі в стилі С.


1

ls -aqбуде надрукувати всі імена файлів, ?замість кожного недрукуваного символу. У багатьох варіантах unix ls -ABабо ls -Ab(перевірте сторінку чоловіка) буде надруковано восьмеричні кришки. З ls -aq, ви можете використовувати відображений вихід у вигляді оболонки.

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

Ще один спосіб отримати ім'я файлу - використовувати завершення оболонки: введіть mv .і натисніть Tabкілька разів, поки не буде вставлено дивне ім'я.


ls -qне показав файл, тоді як ls -b. можливо тому, що його ім'я було не так, [weird-character]OA.texале насправді`printf %b '\033OA'`.tex
luxifer

@luxifer Там .на початку імені файлу є, тому вам потрібно ls -Aqабо ls -aq. І якщо ви використовуєте підстановочні символи оболонок, вам потрібно зробити .явне: *не буде містити файл, але .*буде.
Жил "ТАК - перестань бути злим"

ні там не було! Вихід, який я розмістив, був від rsync, і це був кінець рядка. Rsync спочатку копіює $DESTINATION/.$FILENAMEфайл, перш ніж він перемістить файл до правильного імені. Для цього у джерела файл не мав .на початку свого імені. Крім того, як було сказано, ls -qфайл не показав би, тоді як ls -b.
luxifer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.