Usuń prefiksy z nazw plików


10

Mam kilka plików w następujący sposób:

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

Muszę zmienić ich nazwę, aby wykluczyć prefiks. Musi wyglądać tak ...

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

EDYTOWAĆ

Zapomniałem dodać, że używam Solaris.

Odpowiedzi:


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

uruchom to, aby upewnić się, że wszystko jest w porządku.
jeśli tak jest, usuń echoz polecenia, a zmieni on nazwy plików według potrzeb.

"${file#*_}"

jest zwykłą funkcją podstawiania w powłoce. Usuwa wszystkie znaki przed pierwszym _symbolem (w tym sam symbol). Aby uzyskać więcej informacji, spójrz tutaj .


Czy możesz wyjaśnić, co dokładnie się dzieje "${file#*_}"?
Pieter van Niekerk

Dodałem wyjaśnienie do mojej odpowiedzi.
pędzi

IMO, większość wszystkich skryptów powinna być napisana w celu odtworzenia żądanego wyniku polecenia. Ale nie usuwaj echo, po prostu potokuj wyjście skryptu bash.
Jim L.

7

Możesz do tego użyć narzędzia rename:

rename "s/.*_//" *

Jeśli dołączysz, -nnic nie zmieni nazwy i po prostu pokaże, co można by zrobić bez -n.

W odpowiedzi na komentarz Rusha: my renameis faktycznie jest linkiem do prenamedostarczonego z perlpakietem Debiana i Ubuntu .


5
Pamiętaj, że renamenie zawsze jest tak samo w różnych systemach i czasami jego składnia może się różnić.
pędzi

1
Pytający dodał teraz, że używa Solaris. Więc to polecenie zmiany nazwy (które jest specyficzne dla Debiana i pochodnych) nie jest dla niego dostępne.
Gilles 'SO - przestań być zły'

1
... chyba że uda mu się zbudować go ze źródła.
sendmoreinfo

@Gilles perl-renamewcale nie jest specyficzny dla Debiana. To nie tylko nazywa rename, ale perl-renameczy prenamew innych dystrybucjach. Powinien zawsze znajdować się w repozytorium, a jeden z nich jest również zainstalowany z perlem .
terdon

@terdon Polecenie zmiany nazwy plików, których podstawowym zastosowaniem jest wyrażenie perla, nie jest specyficzne dla Debiana. Taka komenda, wywołana renamei prawdopodobnie zainstalowana bez jawnego żądania pakietu, który nie jest nazywany tylkorename , jest specyficzna dla Debiana. Inne dystrybucje Linuksa wywołują polecenie prenamelub perl-renameunikają pomyłek z plikiem ut-linux renamei nie łączą go z pakietem perla, a ja nie znam żadnego uniksowego systemu Linux, który dostarczałby go pod tą nazwą renamelub który dostarczałby go w domyślna instalacja pod dowolną nazwą.
Gilles 'SO - przestań być zły'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.