Сохраните 9 символов без изменений и переименуйте все файлы в папке - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок с Bash и пытаюсь переименовать файлы в своей папке, сохраняя первые 9 символов без изменений и избавляясь от всего, что будет после.

abc123456olda.jpg> abc123456.jpg

Я написал это;

for file in *
do
    echo mv "$file" `echo "$file" | sed -e 's/(.{9}).*(\.jpg)$/$1$2/' *.jpg
done

Не заставил его работать. Может кто-нибудь подсказать, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Вы не за горами, попробуйте это:

for file in *.jpg; do
    echo mv "$file" "$(echo "$file" | sed -E -e 's/(.{9}).*(\.jpg)$/\1\2/')"
done

Есть некоторые исправления. Важным является то, что $1$2 должно быть \1\2, и вам нужно флаг -E для sed, чтобы он понимал группировку с круглыми скобками.

Как только вы увидите, что команда в порядке, удалите echo из второй строки, так что mv фактически выполняется.

0 голосов
/ 21 апреля 2020

Используйте встроенный оператор расширения параметров bash вместо sed.

Кроме того, в оператор for следует ставить *.jpg, а не аргумент sed; вы обрабатываете содержимое файлов, а не имена файлов.

for file in *.jpg
do
    mv "$file" "${file:0:9}.jpg"
done

${file:0:9} означает подстроку $file, начиная с индекса 0 и имея 9 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...