Как заменить % - закодированные символы в наборе имен файлов подчеркиванием с помощью команд оболочки?

Я загрузил много файлов, некоторые из которых содержащий недопустимые символы закодировали к чему-то как %2C, %2F...

Я попробовал rename 's/%[0-9][A-Z]/_/g * и rename 's/\%[0-9][A-Z]/_/g * но они ничего не делают. (Извините, мой отказ. rename работы. Я ввел некоторые опечатки или что-то связанное с полноширинными символами / символами полуширины... ONZ.......... Голосуйте для закрытия этого Q)

Например, имена файлов file,1.pdf, file/2.pdf ... кодируются как file%2C1.pdf, file%2F2.pdf. Я хочу переименовать их к file_1.pdf, file_2.pdf,...

-1
задан 17 July 2017 в 10:44

2 ответа

Можно использовать:

rename 's/%/_/g' *

Первый показ это использование -n опция (пробный прогон) для проверки все прекрасно:

rename -n 's/%/_/g' *

Получать число также:

rename -n 's/%[0-9]/_/g' *

или даже используйте что-то вроде этого для удаления всех символов кроме алфавитно-цифровых:

$ rename -n 's/[^a-zA-z0-9]/_/g' *
rename(%SOME%2FFOR%, _SOME_2FFOR_)
rename(SOME%2FFOR, SOME_2FFOR)
rename(SOME%2FFOR%, SOME_2FFOR_)
0
ответ дан 2 November 2019 в 22:09

используйте следующий сценарий, скопируйте сценарий и сохраните его в /bin как renamer.sh затем каждый раз, когда Вы хотите сделать любые переименования на файлах этого типа, используйте простую команду renamer.sh #Input files#;

#!/bin/bash

for input in $@;
    do 
        inputMod=$( echo "$input" | sed 's/\(%\)/\_/pg' );
        mv "$input" "$inputMod" &> /dev/null; 
        shift; 
    done;
0
ответ дан 2 November 2019 в 22:09

Другие вопросы по тегам:

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