У меня есть некоторые файлы как это:
database1-backup-01-01-2011.sql
database2-backup-01-01-2011.sql
... и т.д. Я хочу переименовать их для добавления AM, как это:
database1-backup-01-01-2011-AM.sql
database2-backup-01-01-2011-AM.sql
Что самый краткий путь состоит в том, чтобы сделать это от оболочки удара?
Другая опция:
for i in *.sql ; do
mv -v $i ${i%.sql}-AM.sql
done
Это циклично выполняется через все .sql файлы и переименовывает их для окончания в-AM.sql вместо этого.
PROTIP: использовать $(command)
вместо `command`
в Ваших сценариях (и командные строки), это делает заключение в кавычки и выход из меньшего количества кошмара.
Попробуйте этот небольшой сценарий:
#!/bin/sh
FILES=`ls *.sql`
for FILE in ${FILES}
{
BASE=`basename ${FILE} .sql`
mv ${FILE} ${BASE}-AM.sql
}
Я просто ввел это из памяти поэтому, если это не работает, 100% не обвиняют меня (т.е. создают резервную копию Ваших данных сначала ;))
Как это работает:
Соберите все файлы в переменную (Вы могли вставить это для вместо этого, но мне нравится сохранять вещи легкими читать):
FILES=`ls *.sql`
Цикл через каждый файл:
for FILE in ${FILES} { ... }
Получите имя файла без .sql:
BASE=`basename ${FILE} .sql`
Переименуйте файл, добавив-AM.sql к базовому имени:
mv ${FILE} ${BASE}-AM.sql
Используя версию сценария Perl rename
:
rename 's/\.sql$/-AM$&/' *.sql
Используя util-linux-ng
версия rename
(но только если ".sql" только появляется в конце имени файла):
rename .sql -AM.sql *.sql
Используя mmv
:
mmv '*.sql' '#1-AM.sql'
Так как сценарий Perl был предложен, вот сценарий Ruby, чтобы сделать то же:
`ls *.sql`.split("\n").each do |filename|
new_filename = filename.split('.').join('-AM.')
`mv #{filename} #{new_filename}`
end