Как может я обрабатывать в пакетном режиме переименовать файлы в ударе?

У меня есть некоторые файлы как это:

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

Что самый краткий путь состоит в том, чтобы сделать это от оболочки удара?

6
задан 02.03.2011, 16:18

4 ответа

Другая опция:

for i in *.sql ; do
    mv -v $i ${i%.sql}-AM.sql
done

Это циклично выполняется через все .sql файлы и переименовывает их для окончания в-AM.sql вместо этого.

PROTIP: использовать $(command) вместо `command` в Ваших сценариях (и командные строки), это делает заключение в кавычки и выход из меньшего количества кошмара.

15
ответ дан 07.12.2019, 15:26

Попробуйте этот небольшой сценарий:

#!/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
7
ответ дан 07.12.2019, 15:26

Используя версию сценария Perl rename:

rename 's/\.sql$/-AM$&/' *.sql

Используя util-linux-ng версия rename (но только если ".sql" только появляется в конце имени файла):

rename .sql -AM.sql *.sql

Используя mmv:

mmv '*.sql' '#1-AM.sql'
4
ответ дан 07.12.2019, 15:26

Так как сценарий Perl был предложен, вот сценарий Ruby, чтобы сделать то же:

`ls *.sql`.split("\n").each do |filename|
  new_filename = filename.split('.').join('-AM.')
  `mv #{filename} #{new_filename}`
end
1
ответ дан 07.12.2019, 15:26

Теги

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