Как удалить кодирование URI из имен файлов?

Вот маленький сценарий, который делает это:

for var in `find . -type f -name "*(1).m4a"`; do
    new=`echo $var | cut -d'(' -f1`;
    mv $var $new.m4a;
done
7
23.03.2015, 23:49
4 ответа

На 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 $_' *%*
9
27.01.2020, 20:14

Можно использовать 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) опция прежде, чем переименовать любые файлы.

7
27.01.2020, 20:14

Вы могли использовать convmv в каталоге, где у Вас есть файлы:
Для тестирования, каков вывод был бы:

convmv --unescape *%20*

Для фактического переименования файлов добавляют --notest:

convmv --unescape --notest *%20*
4
27.01.2020, 20:14

Другая альтернатива, которая не полагается на внешние инструменты за пределами удара:

for old in *; do
    new="${old//+/ }"
    printf -v new '%b' "${new//%/\x}"
    mv -- "$old" "$new"
done
4
27.01.2020, 20:14

Теги

Похожие вопросы