Откройте Терминал и перейдите в каталог, затем используйте указанную команду, чтобы удалить все вхождения ?
в ваших именах файлов в этом каталоге:
cd ~/music/artist/album/
for f in *; do mv -- "$f" "${f//\?/}"; done
Перед тем, как приступить к выполнению команды, вы можете проверить ее, которая покажет вам исходное имя файла, а затем новое:
for f in *; do echo -- "$f" "${f//\?/}"; done
-- 01 title with?.flac 01 title with.flac
Чтобы сделать это рекурсивно, вам нужно использовать команду find
и обязательно попробовать ее сначала в тестовом каталоге. Неправильная замена строк всех ваших имен файлов может сделать вещи намного хуже, чем лучше. Для таких рекурсивных операций я всегда рекомендую заранее сделать резервную копию ваших данных.
Первая команда - это пробный прогон, означающий, что на самом деле ничего не изменилось.
Вторая команда - это реальная вещь, которая рекурсивно переименовывает все имена файлов (исключая вопросительные знаки) в текущем каталоге и во всех подкаталогах:
find . -type f -name '*\?*' | while read f; do echo mv "$f" "${f//\?/}"; done
find . -type f -name '*\?*' | while read f; do mv "$f" "${f//\?/}"; done