Как быстро переименовать кучу файлов в папке

У меня есть куча файлов с именем «something_12345.doc» (любое 5-значное число, не обязательно 12345). Мне нужно переименовать их все просто в «something.doc». Это файловая система Unix, и я подозреваю, что есть способ сделать это с помощью всего одной команды... Может ли кто-нибудь из гуру регулярных выражений Unix помочь?

Спасибо!


person user261231    schedule 28.01.2010    source источник
comment
У вас останется один файл, по сути, вы удаляете N-1 файлов и копируете N-й файл в something.doc -- Это то, что вы хотите?   -  person dirkgently    schedule 28.01.2010
comment
-1, потому что спрашивал часто. Сначала вы должны искать на SO.   -  person bortzmeyer    schedule 31.01.2010


Ответы (6)


@OP, оболочка уже расширила ваш шаблон для вас, там в вашем выражении mv вам не нужно снова указывать шаблон для 5 цифр.

for file in *_[0-9][0-9][0-9][0-9][0-9].doc
do
  echo mv "$file" "${file%_*}.doc"
done
person ghostdog74    schedule 29.01.2010
comment
Спасибо ghostdog74 и всем остальным! - person user261231; 29.01.2010


использовать sed

ls *.doc | sed 's:\([^0-9_]\)[0-9_][0-9_]*\.doc:$(mv & \1.doc)' | /bin/bash
person mohitgupta    schedule 17.02.2013

Да, rename принимает регулярные выражения в стиле Perl. Выполните man rename.

person dirkgently    schedule 28.01.2010
comment
Не всегда. В системах RH выполняется простая замена строки. - person Ignacio Vazquez-Abrams; 31.01.2010

Во FreeBSD вас может заинтересовать порт sysutils/renameutils. Команда qmv открывает ваш $EDITOR и позволяет указать все переименования файлов в достаточно удобной среде. Лично я предпочитаю формат qmv -fdo (один столбец).

person jkerian    schedule 16.01.2016

person    schedule
comment
Я на FreeBSD, так что это не работает.. bash: /usr/local/bin/rename: слишком длинный список аргументов, я не могу понять, как установить переменные для переименования - person user261231; 29.01.2010
comment
Догадаться. для i в [A-Za-z]*_[0-9][0-9][0-9][0-9][0-9].doc; do mv $i ${i/_[0-9][0-9][0-9][0-9][0-9]}; Готово - person user261231; 29.01.2010