Как переименовать несколько файлов, удалив 4 символа в середине, которые различаются в каждом имени файла, но находятся в одном и том же месте?

Как переименовать несколько файлов, удалив 4 символа в середине, которые различаются в каждом имени файла, но находятся в одном и том же месте?

Я хотел бы переименовать свои файлы с помощью Bash, удалив 4 символа в середине.

Исходные имена файлов:

dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf

Я хочу удалить 4 буквы в середине, чтобы новые имена файлов были такими:

dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf

Четыре буквы всегда будут следовать за _и всегда будет одна _в имени файла. Все имена файлов имеют одинаковую длину, четыре символа, которые я хочу удалить, находятся в одном и том же месте.

Я совсем новичок в этом деле и не знаю, какую версию ОС я использую, кроме Windows 10. Я пытался сделать это через командное окно Git Bash.

решение1

Если у вас есть perl-rename (доступен как renameв системах на базе Debian, perl-renameтак и в других), вы можете сделать следующее:

$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf

Причины только печатать то -n, renameчто он будет делать, не внося никаких изменений. Как только вы убедитесь, что он работает так, как вам нужно, удалите -nи снова запустите команду, чтобы фактически переименовать файлы:

rename 's/_..../_/' *pdf

Если по какой-то причине вы не можете использовать rename, вы также можете сделать это с помощью простого цикла оболочки:

for file in *pdf; do
    echo mv -- "$file" "${file/_????/_}"
done

Еще раз, если вы уверены, что это делает то, что вам нужно, удалите , echoчтобы фактически переименовать команды:

for file in *pdf; do
    mv -- "$file" "${file/_????/_}"
done

решение2

С использованиемрасширение параметра:

$ for i in *.pdf; do
    echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
    #  actual `mv` command
    # mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
  done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf

Если вы удовлетворены результатом echo, удалите его, чтобы выполнить команду.

Связанный контент