Я не очень хорошо знаю iconv, но
echo ... | iconv ....
подходит для текстовых строк, но если вы хотите использовать имя файла, конечно, вам нужно указать файл справасторона командной строки iconv, то есть
ls *.files | xargs -I{} iconv -f UTF8 -t ASCII//TRANSLIT {}
верно?
Что касается перемещения (mv
) файла, вы должны убедиться, что исходное имя файла отличается от целевого имени файла,Из вашего сообщения не ясно, каким должно быть целевое имя файла.Если iconv
может изменять файлы на месте, и вы не хотите сохранять оригинал, тогда я ожидаю, что приведенные выше xargs решат вашу проблему.
ИЛИ вы говорите, что в именах файлов содержитсясимволы, которые вы хотите обработать с помощью iconv
.Это может помочь отредактировать ваше сообщение, включив в него образцы имен файлов, до и после обработки iconv.Что-то вроде этого?
find dir/ -type f -exec mv {} $(echo {}.fix | iconv -f UTF8 -t ASCII//TRANSLIT ) \;
Для имен файлов, которые не изменяются с помощью iconv
, необходимо иметь способ отделить имя от исходного имени файла.Так что за этим последует шаг /bin/rm {}
.
ИЛИ см. Этот пост Как рекурсивно преобразовать все имена файлов в поддереве папок из UTF-8 в ASCII в Linux .
Надеюсь, это поможет.