Вы должны попытаться выяснить, почему у вас такие странные файлы, прежде чем исправлять его. Как только вы знаете, вы можете переименовать файлы.
Когда вы просто хотите переименовать 1 файл, используйте команду
mv "Pew Pew.mp4"* "Pew Pew.mp4"
отрезав полное расширение (с filename=${filename%%.*}
) не поможет вам, если вы хотите использовать оголенное расширение (mp4 или JPG или. ..). EDIT: Я думаю, что OP хочет работать, поэтому я даю еще одну попытку. Когда у вас есть короткий список расширений, вы можете попробовать
for ext in mpeg mpg jpg avo mov; do
for filename in *.${ext}*; do
mv "${filename%%.*}.${ext}"* "${filename%%.*}.${ext}"
done
done
Вы можете попробовать strings
, чтобы получить читаемую строку.
echo "${filename}" | strings | wc
# Rename file
mv "${filename}" "$(echo "${filename}"| strings)"
EDIT: strings
дает более 1 линии в результате и нежелательных пространств. Поскольку у Pew Pew
есть пространство внутри, я надеюсь, что перед точкой будут все пробелы, подчеркивания и минусовые знаки.
новое_имя можно построить что-то вроде
tmpname=$(echo "${filename}"| strings | head -1)
newname=${tmpname% *}
# or another way
newname=$(echo "${filename}"| sed 's/[[:alnum:]_- ]*\.[[:alnum:]]*\).*/\1/')
# or another (the best?) way (hoping that the first unwanted character is not a space)
newname="${filename%%[^[:alnum:]\.-_]*}"
# resulting in
mv "${filename}" "${filename%%[^[:alnum:]\.-_]*}"
Как вы знаете, эти дополнительные символы являются частью расширения файла? (И если они есть, вы должны их выбросить?) Во всяком случае, (1) некоторые из символов на самом деле являются символами UTF8 в этом имени? (см. http://stackoverflow.com/a/31009961/2564301) и (2), если нет, лучше проверить свой жесткий диск. – usr2564301
Хороший вопрос. Они не являются символами UTF8 в названии. Когда я создаю новый файл с именем $ filename.conf в качестве имени, он делает такой файл: Pew Pew.mp4 ?? [23; 0t.conf. Я не знаю, что это за персонажи, но я не думаю, что это мой жесткий диск. Это имена файлов, которые возвращает youtube-dl -get-filename – baruch
Ouch - похоже, что какая-то командная команда переименования запускала amok. Возможно, с 'sed' можно отключить все после первого символа не ASCII. – usr2564301