Как переименовать несколько файлов, удалив все, кроме цифр?

Похоже Cloud -Utils -Growpart был тем, что мне было нужно:
https://centos.pkgs.org/7/centos-x86_64/cloud-utils-growpart-0.29-2.el7.noarch.rpm.html

3
01.07.2020, 19:47
3 ответа

Перед заменой удалите суффикс .mp4.

for f in *.mp4; do
  fname=${f%.mp4}
  mv -- "$f" "${fname//[^0-9]}.mp4"
done

Я добавил --на случай, если ваши имена файлов начинаются с -, и удалил echo. Будь осторожен.

8
18.03.2021, 23:22

Вы правы, 4появляется из расширения mp4. Причина в том, что вы обрабатываете полное имя файла в инструкции ${f//[^0-9]/}для удаления всех вхождений символов, не являющихся цифрами, включая часть .mpи оставляя 4в конце.

Вы можете использовать sedдля целей:

for f in *.mp4; do
  newname="$(sed 's/^[^0-9]*//' <<< "$f")"
  mv "$f" "$newname"
done

но обязательно протестируйте его (как вы, очевидно, делаете, как я вижу из вашего поста ).

5
18.03.2021, 23:22

Используя prename, вы можете запустить что-то вроде

prename 's/^\D*//' *.mp4

примечания:

  • \Dне цифра
  • ^\D*последовательность нецифр в начале имени файла
  • s/^\D*//удалить начальные нецифры и переименовать

В некоторых дистрибутивах Linux (, например.Ubuntu )эта команда называется rename, а в других (, например. Арка)perl-rename.

2
18.03.2021, 23:22

Теги

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