BSD - Удалите символы неASCII из всех файлов в каталоге рекурсивно

Вы могли использовать некоторый Linux LiveCD как SystemRescueCD для копирования от диска PATA до диска SATA. Добавленная премия при выполнении Вы могли изменить размер разделов на новом (вероятно, больше) диск.

dd if=/dev/hda of=/dev/sda 

Все, в чем Вы нуждаетесь:)

5
задан 2 January 2010 в 00:52
5 ответов

Попытайтесь монтировать файловую систему с iocharset набором опции к кодированию, это использует.

От man mount под разделом "Mount options for fat":

   iocharset=value
          Character set to use for converting between 8 bit characters and
          16 bit Unicode characters. The default is iso8859-1.  Long file‐
          names are stored on disk in Unicode format.

См. также под разделом "Mount options for vfat":

   uni_xlate
          Translate  unhandled  Unicode  characters  to  special   escaped
          sequences.   This lets you backup and restore filenames that are
          created with any Unicode characters. Without this option, a  '?'
          is used when no translation is possible. The escape character is
          ':' because it is otherwise illegal on the vfat filesystem.  The
          escape  sequence  that gets used, where u is the unicode charac‐
          ter, is: ':', (u & 0x3f), ((u>>6) & 0x3f), (u>>12).

и

   utf8   UTF8  is  the  filesystem safe 8-bit encoding of Unicode that is
          used by the console. It can be be  enabled  for  the  filesystem
          with this option or disabled with utf8=0, utf8=no or utf8=false.
          If `uni_xlate' gets set, UTF8 gets disabled.

Править:

Я сожалею, это был Linux, это для BSD (от man mount_msdosfs:

 -L locale
     Specify locale name used for file name conversions for DOS and
     Win'95 names.  By default ISO 8859-1 assumed as local character
     set.

 -D DOS_codepage
     Specify the MS-DOS code page (aka IBM/OEM code page) name used
     for file name conversions for DOS names.
0
ответ дан 3 December 2019 в 01:12
  • 1
    Спасибо за ответ, here' s, что я попробовал: < pre> oracle:/mnt# монтируют-t MS-DOS-o iocharset=utf8/dev/ad6s1/mnt/elements </pre> Но это перестало работать с: < pre> смонтируйтесь: Используя "-t msdosfs" с тех пор "-t msdos" удерживается от использования. mount_msdosfs:/dev/ad6s1: смонтируйте опцию < iocharset> неизвестно: Недействительный аргумент < pre> –  Dan 6 January 2010 в 18:01
  • 2
    < pre> doesn' t работа в комментариях, используйте обратные галочки вместо этого. –  Paused until further notice. 6 January 2010 в 19:45
  • 3
    Хорошо я попробовал mount_msdosfs, но I' m необучение, что указать для L или D, переключается как документы don' t вдаются в любые определенные подробности. Я полагал, что диск означал, что мне было нужно large опция и here' s, что я попробовал: mount_msdosfs -o large /dev/ad6s1 /mnt/Elements. К сожалению, этот didn' t работают также, I' m, все еще получая мир (и другие) дросселирующий на определенных именах файлов, содержащих ' special'персонажи. –  Dan 7 January 2010 в 23:35
  • 4
    Каков источник диска? Это было от системы Windows? Какая языковая версия? Вероятно, значения для-L или-D включали бы CP437 или IBM437, CP1252, ASCII, ISO 646, другой ISO 8859 -* или изменения тех имен или других. В моей системе Ubuntu there' s каталог в /usr/share/i18n/charmaps/ с файлами карт символов (имена файлов и текст заголовка в них) может быть информативным.См. также: en.wikipedia.org/wiki/Character_encoding –  Paused until further notice. 8 January 2010 в 03:03
  • 5
    Это была Western Digital " Elements" Внешний жесткий диск USB, которого внешний случай перестал работать, из которого я удалил его и вытолкал его в запасной порт SATA в моем поле NAS. OS X показал его диском FAT, таким образом, сделал предположение о нем являющийся FAT32. I' ve использовал его с британскими версиями Windows XP и OS X. –  Dan 8 January 2010 в 11:06

Переименуйте может сделать это..

попробуйте что-то как

find dir -depth -exec rename -n 's/[^[:ascii:]]/_/g' {} \; | cat -v

Вам, возможно, понадобится кошка-v для надлежащего отображения любых странных символов без завинчиваемого терминала.

если это печатает приемлемое изменение замен-n к-v.

Тем не менее это кажется, что набор символов в Вашей файловой системе является неправильным (смонтируйте-o utf8?), так как этот вид вещи должен действительно работать...

7
ответ дан 3 December 2019 в 01:12
  • 1
    Спасибо за ответ - я считал, что должен смочь смонтировать свою файловую систему, поскольку что-то другое кроме сети, казалось, указало что это doesn' t относятся к разделам FAT32? I' d нравится быть исправленными хотя если этот isn' t случай? FreeNAS автомонтирует диск, когда он запускается, но я действительно верю there' s опция к override/re-mount и т.д. –  Dan 4 January 2010 в 15:49
  • 2
    Хм... Я don' t, кажется, имеют переименовать команду на этом поле? I' судивший человек ve переименовывает без удачи –  Dan 4 January 2010 в 20:52

Используйте convmv для преобразования имен файлов, если они действительно неправильно кодируются. Необходимо предпочесть монтировать файловую систему с корректным кодированием во-первых.

1
ответ дан 3 December 2019 в 01:12

Замена подчеркиванием:

find . | perl -ane '{ if(m/[[:^ascii:]]/) { print } }' | rename -n 's/[^[:ascii:]]/_/g'
0
ответ дан 3 December 2019 в 01:12

Это один из правильных способов рекурсивного применения:

find . -depth -execdir rename 'y/[\:\;\>\<\@\$\#\&\(\)\?\\\%\ ]/_/' {} \;

замените все эти символы на подчеркивание. Будьте осторожны, учитываются все пробелы.

почему это работает? пройдите этот тест:

mkdir test

cd test

mkdir -p a$/b$/c$/d$ f%/g%/h%/i% j%/k%/l%/m%

find . -depth -execdir rename 'y/[\:\;\>\<\@\$\#\&\(\)\?\\\%\ ]/_/' {} \;

ls -R

(как видите, все файлы были изменены)

2
ответ дан 3 December 2019 в 01:12

Теги

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