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


10

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

Итак, вот что говорит rsync:

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

Первое, на что нужно обратить внимание, это то, что код символа не может быть шестнадцатеричным или восьмеричным, поэтому я его погуглил и нашел только это . Так что это может быть CURSOR UPперсонаж (или нет). я пробовал

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

но безрезультатно. Я также попытался прокрутить вывод ls этого каталога, odно безрезультатно.

Что еще я могу сделать? Или какого персонажа я ищу в любом случае?

Спасибо


1
Попробуйте ls -b, что должно показать побеги в стиле C
энзотиб

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

Ответы:


9

Вы можете использовать -bопцию to ls, которая показывает неграфические символы как escape-последовательности в стиле C.


1

ls -aqнапечатает все имена файлов, ?вместо каждого непечатаемого символа. Во многих вариантах Unix, ls -ABили ls -Ab(проверьте страницу руководства) будет печатать восьмеричные escape-символы. С помощью 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.