Я хотел бы переименовать свои файлы с помощью 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
, удалите его, чтобы выполнить команду.