Кодировка символов имени файла путается при вызове с помощью find -exec

Возможно, вы захотите взглянуть на ловушку DEBUGв bash. Изman builtins:

If a sigspec is DEBUG, the command arg is executed before every simple command,
for command, case command, select command, every arithmetic  for  command,  and
before  the  first  command  executes  in  a  shell function (see SHELL GRAMMAR
above).  Refer to the description of the extdebug option to the  shopt  builtin
for  details of its effect on the DEBUG trap.  If a sigspec is RETURN, the com‐
mand arg is executed each time a shell function or a script executed with the.
or source builtins finishes executing.

Таким образом, вы можете настроить функцию отладки следующим образом. Поскольку он запускается перед командами, вы можете использовать его для добавления к вашему выводу.

#!/bin/bash

debug() {
   : # echo or other commands here
}

trap debug DEBUG

# Commands here
3
20.03.2020, 21:37
2 ответа

Я читал, что MacOS X хранит такие символы, как ö, как составные/комбинирующие символы. Это как два символа :o, за которыми следует объединение ". Вероятно, это не относится к уровню Unix.

Я могу воспроизвести на Debian Gnu/Linux:echo Åström | sed 's/[^[:alnum:]]//g'--перейти кhttps://en.wikipedia.org/wiki/Precomposed_character#Comparing_precomposed_and_decomposed_charactersи вставить две альтернативные версии Åström. Тот, кто использует комбинированные символы, опускает акценты.

Создается впечатление, что sedвидит объединяющиеся символы так, как если бы они были просто не -буквенными -цифровыми символами.

Обход

В качестве временного решения передайте имена файлов через

iconv -f utf-8-mac -t utf-8

Текст проверен с помощьюod

Выполнено в Debian Gnu/Linux с использованием терминала Konsole и оболочки bash, рабочего стола Plasma -и вставлено из браузера Chrome.

#↳ echo  Åström composing | od -tax1
0000000   A   L  nl   s   t   r   o   L  bs   m  sp   c   o   m   p   o
         41  cc  8a  73  74  72  6f  cc  88  6d  20  63  6f  6d  70  6f
0000020   s   i   n   g  nl
         73  69  6e  67  0a
0000025

#↳ echo  Åström composed | od -tax1
0000000   C enq   s   t   r   C   6   m  sp   c   o   m   p   o   s   e
         c3  85  73  74  72  c3  b6  6d  20  63  6f  6d  70  6f  73  65
0000020   d  nl
         64  0a
0000022
1
28.04.2021, 23:19

Вероятно, это вина sed.

Однако я не могу воспроизвести ваши результаты на macOS 10.13.6, где öвсегда преобразуется в обычный o, и это происходит как с /usr/bin/sed, так и с GNU Sed.

На более новой машине FreeBSD öсохраняется во всех случаях, если локаль заканчивается на .UTF-8. Кажется, я припоминаю, что в первоначальных попытках FreeBSD интернационализировать Sed были ошибки. macOS обычно использует более старые версии кода BSD и, вероятно, не использует последние исправления.

В NetBSD с более традиционной BSD sedöудаляется, как будто это не буквенно-цифровой символ.

0
28.04.2021, 23:19

Теги

Похожие вопросы