2010-01-28 2 views
1

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

Спасибо!

+3

У вас останется один файл, в основном вы удаляете файлы N-1 и копируете N-й файл в 'something.doc' - это то, что вы хотите? – dirkgently

+0

-1 потому что спрашивал * часто *. Сначала вы должны искать на SO. – bortzmeyer

ответ

0

Да, rename принимает регулярные выражения perl style. Сделайте man rename.

+0

Не всегда. В системах RH выполняется простая замена строки. –

2

rename 's/_[0-9][0-9][0-9][0-9][0-9]//' *.doc

+0

я на FreeBSD, так что это не работает .. Баш:/USR/местные/бен/переименовывать: список аргументов слишком длинный я не могу понять, как установить переменные для переименования – user261231

+0

Фигурные его , для 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]}"; done – user261231

3

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

for file in *_[0-9][0-9][0-9][0-9][0-9].doc 
do 
    echo mv "$file" "${file%_*}.doc" 
done 
+0

Спасибо ghostdog74 и всем остальным! – user261231

1

использование СЭД

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

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

Смежные вопросы