Как обработать в пакетном режиме чистые имена файлов, содержащие недопустимые символы

Я не знаю, возможно ли это.

Следующая лучшая вещь может передавать вещи по каналу к less -FX. -F флаг сразу сделает менее выход, если весь вход будет соответствовать на одном экране, и -X заставит его не очистить экран после выхода.

1
04.02.2014, 17:31
2 ответа

Perl-путь:

#!/usr/bin/perl

opendir(DIR,".") or die "$@:$!";
while ($in = readdir(DIR)) {
  next unless -f $in;
  ($out = $in) =~ s/[^a-zA-Z0-9._-]//g;
  warn "$@:$!" unless rename $in, $out;
}
closedir(DIR);

regex фильтрует только a-zA-Z... (мог также быть [:печать:] для печатаемых символов) как допустимые символы. Нет никакой проверки пустые целевые имена.

1
27.01.2020, 23:28
  • 1
    , я мог, вероятно, улучшить его путем замены Вашего [^a-zA-Z0-9._-] [\W._\-]+. Я не знаю ($out = $in) конструкция. Что это делает? [:print:] класс символов, вероятно, был бы слишком большим, если это включает все печатаемые символы жемчуга (новые строки также). –  highsciguy 05.02.2014, 12:31
  • 2
    Да, вероятно, это всегда зависит, что Вы хотите, regexp установлен дискретными выражениями, таким образом, это - преимущество, должен видеть, какие символы будут переданы. ($out = $in), присвоение, как $out = $in; $out = ~... –   05.02.2014, 15:02

С zsh:

autoload zmv
zmv -n '(**/)(*)' '$1${2//[^[:print:]]}'

(удалите -n когда счастливый). Если Вы хотите включать скрытые файлы (и изучить скрытых директоров):

zmv -Qn '(**/)(*)(D)' '$1${2//[^[:print:]]}'

Это удаляет символы, которые являются непечатаемыми в Вашей локали.

2
27.01.2020, 23:28
  • 1
    +1 для скорости; это работает на меня, но решением для удара все еще был бы очень полезный –  highsciguy 04.02.2014, 18:11
  • 2
    символ, который, кажется, доставляет неприятности, но, кажется, не обращен, . Другой появляется как \#37. –  highsciguy 04.02.2014, 18:29
  • 3
    @highsciguy, U+2019 (правильная единственная кавычка), это не является особенным ни для какого инструмента, который я знаю. В котором пути это вызывает Вас проблема? Можете Вы, возможно, редактировать свой вопрос с большим количеством специфических особенностей относительно того, какие символы являются проблемой. Они - те, которых Вы не можете ввести со своей клавиатурой? Какую клавиатуру Вы имеете? –  Stéphane Chazelas 04.02.2014, 18:55
  • 4
    Нет, я могу ввести его, но я вижу, что некоторые файлы, содержащие этот символ, не могут быть скопированы rsync. Я просто проверил однако, что могу создать и переместить файлы с этим символом вручную, таким образом, я больше не уверен, что вызывает проблему для них. –  highsciguy 04.02.2014, 19:15

Теги

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