Удалить префиксы из имен файлов

10

У меня есть куча файлов следующим образом:

04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956

Мне нужно переименовать их, чтобы исключить префикс. Это должно выглядеть так ..

b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956

РЕДАКТИРОВАТЬ

Я забыл добавить, что я использую Solaris.

Питер ван Никерк
источник

Ответы:

19
for file in * ; do
    echo mv -v "$file" "${file#*_}"
done

запустите это, чтобы убедиться, что все в порядке.
если это так, удалите echoиз команды, и он будет переименовывать файлы, как вы хотите.

"${file#*_}"

обычная функция подстановки в оболочке Удаляет все символы перед первым _символом (включая сам символ). Для более подробной информации смотрите здесь .

порыв
источник
Не могли бы вы объяснить, что именно происходит в "${file#*_}"?
Питер ван Никерк
Я добавил пояснения к своему ответу.
Раш
ИМО, большинство всех сценариев должны быть написаны, чтобы повторить желаемый вывод команды. Но не удаляйте echo, просто перенаправьте вывод скрипта в bash.
Джим Л.
7

Вы можете использовать инструмент renameдля этого:

rename "s/.*_//" *

Если вы добавите -nего, он не будет ничего переименовывать, а просто покажет вам, что было бы сделано без -n.

В ответ на комментарий rush: my renameis на самом деле является ссылкой на пакет prenameDebian и Ubuntu perl.

SCAI
источник
5
Обратите внимание, что renameне всегда одинаково в разных системах, и иногда его синтаксис может отличаться.
Раш
1
Аскер добавил, что он использует Solaris. Так что эта команда переименования (специфичная для Debian и производных) ему недоступна.
Жиль "ТАК - перестань быть злым"
1
... если ему не удастся построить его из источника.
sendmoreinfo
@Gilles perl-renameсовсем не относится к Debian. Это просто не называется, renameно perl-renameили prenameв других дистрибутивах. Он всегда должен быть в репозиториях, и один также устанавливается с Perl .
Terdon
@terdon Команда для переименования файлов, основное использование которых является выражением perl, не относится к Debian. Такая команда, называется renameи , вероятно, будет установлено без явного запроса пакета , который не называется простоrename , специфична для Debian. Другие дистрибутивы Linux вызывают команду prenameили, perl-renameчтобы избежать путаницы с util-linux, renameи не связывают ее с пакетом perl, и я не знаю ни одного не-Linux Unix, который поставляет его под именем renameили отправляет в установка по умолчанию под любым именем.
Жиль "ТАК - перестань быть злым"