1

С rename возможно массовое изменение имен файлов. Мне удалось избавиться от всех + этой командой и заменить их подчеркиванием:

rename 's/\+/_/g' * 

Я мог бы поменять обычные буквы, например, на А с.

rename 's/a/A/g' *

но я не мог переименовать ? , не так, как это /\? а не как это /? ,

Есть ли способ обратиться к "?"в имени файла? Большинству программ FTP не удается переименовать файлы с помощью ? также. Полуночный командир терпит неудачу. Единственный способ, который я нашел, работает до сих пор:

mv ?myfile.txt myfile.txt

но эта команда недостаточно гибкая. Я бы предпочел переименовать все ? во всех файлах.

3 ответа3

4

Как насчет этого:

for filename in *
do 
    if [ "$filename" == *"?"* ] 
    then
        mv "$filename" "$(echo $filename | tr '?' '-')" 
    fi
done

Или как один лайнер:

for filename in *; do mv "$filename" "$(echo $filename | tr '?' '-')" ; done

Однако, похоже, ваша проблема не в том, что в именах файлов есть вопросительные знаки, а в том, что ваши имена содержат символы, которые ls не распознает.

3

Это некрасиво, но здесь, в одном месте, используется Python:

python -c 'import os, re; [os.rename(i, re.sub(r"\?", "-", i)) for i in os.listdir(".")]'

Что касается очистки имен файлов, может быть, это поможет вам:

python -c 'import os, re; [os.rename(i, unicode(i, "utf-8", "ignore")) for i in os.listdir(".")]'
0

Это может быть излишним, но с помощью bash-скрипта в ссылке, приведенной в этом ответе, вы можете переименовать имя файла с любыми символами в нем, включая вопросительные знаки, символы новой строки, многобайтовые символы, пробелы, тире и любые другие допустимые символы:

https://superuser.com/a/858671/365691

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .