Вот маленький сценарий, который делает это:
for var in `find . -type f -name "*(1).m4a"`; do
new=`echo $var | cut -d'(' -f1`;
mv $var $new.m4a;
done
На Debian и производных (включая Ubuntu), Вы могли использовать rename
, который применяет выражение Perl к каждому имени файла.
rename 's/%20/ /g' L*
| | | | |
| | | | +--- Files to match
| | | +------- globally
| | +--------- with space
| +------------ %20
+--------------- Substitute
Я рассмотрел бы использование подчеркивания вместо пространства – поскольку оно обычно делает жизнь легче в cli мире.
Сделать вывод ко всему кодированию URI:
rename 'use URI::Escape; $_ = uri_unescape $_' *%*
Можно использовать deurlname
от renameutils.
$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf
Я записал сценарий, который позволяет Вам переименовывать файлы в редакторе.
Вы просто передаете сценарий имя файла, и он открывает Вашего редактора с именем файла в нем. Затем Вы редактируете имя файла, пишете и закрываете редактора.
$ ls
L4%20Molecular%20Recognition.pdf
$ viname L4%20Molecular%20Recognition.pdf
======================
L4%20Molecular%20Recognition.pdf█
======================
======================
L4-Molecular-Recognition.pdf█
======================
(pretend this is an editor)
$ ls
L4-Molecular-Recognition.pdf
Я также записал сценарий, который автоматически переименовывает файлы для приспосабливания моей предпочтительной схеме именования. Когда я загружаю файлы, первая вещь, которую я делаю, назвать этот сценарий на них.
$ ls
L4%20Molecular%20Recognition.pdf
$ nf L4%20Molecular%20Recognition.pdf
'L4%20Molecular%20Recognition.pdf' renamed to 'l4-molecular-recognition.pdf'
$ ls
L4-molecular-recognition.pdf
Будьте осторожны с тем сценарием. Это может сделать, некоторые довольно поразительные переименовывают. Используйте его пробный прогон (nf -n
) опция прежде, чем переименовать любые файлы.
Вы могли использовать convmv
в каталоге, где у Вас есть файлы:
Для тестирования, каков вывод был бы:
convmv --unescape *%20*
Для фактического переименования файлов добавляют --notest
:
convmv --unescape --notest *%20*
Другая альтернатива, которая не полагается на внешние инструменты за пределами удара:
for old in *; do
new="${old//+/ }"
printf -v new '%b' "${new//%/\x}"
mv -- "$old" "$new"
done