Видаліть префікси з імен файлів


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

EDIT

Я забув додати, що використовую Solaris.

Відповіді:


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

запустіть це, щоб переконатися, що все нормально.
якщо він є, видаліть echoз команди, і він буде перейменовувати файли, як вам потрібно.

"${file#*_}"

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


Не могли б ви пояснити, що саме відбувається "${file#*_}"?
Пітер ван Нікерк

Я додав пояснення до своєї відповіді.
пік

IMO, більшість усіх сценаріїв повинні бути написані, щоб відповідати бажаному результату команди. Але не видаляйте echo, просто передавайте скрипт на вихід bash.
Джим Л.

7

Ви можете використовувати інструмент renameдля цього:

rename "s/.*_//" *

Якщо ви додасте додаток, -nвін нічого не перейменовує, а просто покаже, що було б без цього -n.

У відповідь на коментар пішки: "my renameis" - це фактично посилання на пакет prenameDebian і Ubuntu perl.


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або передає його в установка за замовчуванням під будь-яким ім'ям.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.