Hapus awalan dari nama file

10

Saya memiliki banyak file sebagai berikut:

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

Saya perlu mengganti nama mereka untuk mengecualikan awalan. Perlu terlihat seperti ini ..

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

EDIT

Saya lupa menambahkan bahwa saya menggunakan Solaris.

Pieter van Niekerk
sumber

Jawaban:

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

jalankan ini untuk memuaskan bahwa semuanya baik-baik saja.
jika ya, hapus echodari perintah dan itu akan mengganti nama file seperti yang Anda inginkan.

"${file#*_}"

adalah fitur substitusi yang biasa di shell. Ini menghapus semua karakter sebelum _simbol pertama (termasuk simbol itu sendiri). Untuk lebih jelasnya lihat di sini .

buru-buru
sumber
Bisakah Anda jelaskan apa yang sebenarnya terjadi "${file#*_}"?
Pieter van Niekerk
Saya menambahkan penjelasan pada jawaban saya.
buru
IMO, sebagian besar semua skrip harus ditulis untuk menggaungkan output perintah yang diinginkan. Tapi jangan kemudian hapus echo, hanya pipa output skrip ke bash.
Jim L.
7

Anda dapat menggunakan alat renameuntuk ini:

rename "s/.*_//" *

Jika Anda menambahkannya -ntidak akan mengubah nama apa pun dan hanya menunjukkan kepada Anda apa yang akan dilakukan tanpa -n.

Menanggapi komentar terburu-buru: renamesebenarnya saya adalah tautan untuk prenamedikirim dengan paket Debian dan Ubuntu perl.

scai
sumber
5
Perhatikan, bahwa renametidak selalu sama pada sistem yang berbeda dan terkadang sintaksanya mungkin berbeda.
buru
1
Penanya sekarang telah menambahkan bahwa dia menggunakan Solaris. Jadi perintah ganti nama ini (yang khusus untuk Debian dan turunannya) tidak tersedia untuknya.
Gilles 'SANGAT berhenti menjadi jahat'
1
... kecuali dia berhasil membangunnya dari sumber.
sendmoreinfo
@Gilles perl-renamesama sekali tidak khusus untuk Debian. Hanya saja tidak dipanggil renametetapi perl-renameatau prenamedi distribusi lain. Itu harus selalu dalam repo dan satu diinstal dengan perl juga.
terdon
@terdon Perintah untuk mengganti nama file yang penggunaan dasarnya adalah ekspresi perl tidak spesifik untuk Debian. Perintah seperti itu, dipanggil renamedan kemungkinan akan dipasang tanpa secara eksplisit meminta paket yang tidak disebut adilrename , khusus untuk Debian. Distribusi Linux lainnya memanggil perintah prenameatau perl-renameuntuk menghindari kebingungan dengan util-linux renamedan jangan membundelnya dengan paket perl, dan saya tidak mengetahui adanya unix non-Linux yang mengirimkannya dengan nama renameatau mengirimkannya dalam instalasi default dengan nama apa pun.
Gilles 'SANGAT berhenti menjadi jahat'