Удалить все недопустимые символы из всех имен файлов в данной папке

Я пытаюсь создать какую-то форму процесса, которая позволит пользователю выбрать папку и перебрать все файлы и очистить любые слэши, дефисы и т. Д. От соответствующих имен файлов.

Я программирую на Windows, но это немного из моей глубины на OSX.

Я нашел это (процесс автоматизации для удаления плохих символов из одной строки), но мне нужно что-то, что будет повторяться и легко использоваться и распространяться между пользователями в сети Mac.

Спасибо за любое предложение помочь

2 ответа

Решение

Единственными символами, которые не допускаются в именах файлов в OS X, являются NUL и либо косая черта ASCII, либо двоеточие ASCII в зависимости от контекста. Символы, которые в Finder отображаются в виде прямой косой черты, в оболочках отображаются как двоеточия, и наоборот.

Вы можете использовать команды оболочки, как это, хотя:

for f in *;do mv "$f" "${f//[^0-9A-Za-z.]}";done
find . -type f|while read f;do b=${f##*/};mv "$f" "${f%/*}/${b//[^[:alnum:].]}";done
brew install rename;find . -type f -exec rename 's/[^0-9A-Za-z.\/]/-/g;s/-+/-/g' {} \;
rename -z *

Или просто используйте приложение, такое как Name Mangler:

Я обернул это в приложение, чтобы вы могли легко распространять его. Он запросит папку, а затем очистит имена файлов.

Загрузите это здесь.

Если эта ссылка не работает, вы можете создать следующее приложение в Automator:

Все, что вам нужно сделать, это:

  • Запросить элементы поиска (вы должны разрешить только папки)
  • Установите этот результат как переменную
  • Запустите сценарий оболочки (вам нужно передать ввод в качестве аргументов, а не в stdin)

    for f in "$1"/*; do
      dir="$(dirname "$f")"
      file="$(basename "$f")"
      mv -- "$f" "${dir}/${file//[^0-9A-Za-z.]}"
    done
    
Другие вопросы по тегам