Dosya adlarından önekleri kaldırma


10

Aşağıdaki gibi bir sürü dosya var:

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

Öneki hariç tutmak için onları yeniden adlandırmam gerekiyor. Bunun gibi görünmesi gerekiyor.

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

DÜZENLE

Solaris kullandığımı eklemeyi unuttum.

Yanıtlar:


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

her şeyin yolunda olduğunu tatmin etmek için bunu çalıştırın.
öyleyse echo, komuttan kaldır ve dosyaları istediğiniz gibi yeniden adlandırır.

"${file#*_}"

kabukta olağan bir ikame özelliğidir. İlk _simgeden önceki tüm karakterleri kaldırır (sembolün kendisi dahil). Daha fazla ayrıntı için buraya bakın .


Tam olarak neler olduğunu açıklar "${file#*_}"mısınız?
Pieter van Niekerk

Cevabıma açıklama ekledim.
acele

IMO, çoğu komut dosyasının istenen komut çıktısını yansıtacak şekilde yazılması gerekir. Ama sonra kaldırmayın echo, sadece komut dosyası çıkışına boru bash.
Jim L.

7

Aracı bunun renameiçin kullanabilirsiniz :

rename "s/.*_//" *

Eğer eklerseniz -n, hiçbir şeyi yeniden adlandırmaz ve sadece onsuz ne olacağını göstermez -n.

Rush'ın yorumuna yanıt olarak: my renameis aslında prenameDebian ve Ubuntu'nun perlpaketiyle birlikte gönderilen bir bağlantıdır .


5
Unutmayın, renameher zaman değil farklı sistemlerde aynıdır ve bazen sözdizimi farklı olabilir.
acele

1
Asker şimdi Solaris kullandığını da ekledi. Dolayısıyla, Debian ve türevlerine özgü olan bu yeniden adlandırma komutu onun için kullanılamaz.
Gilles 'SO- kötü olmayı kes'

1
... kaynağından inşa etmeyi başarmadıkça.
sendmoreinfo

@Gilles Debian'a perl-renamehiç özgü değil. Sadece çağrılmadı renameama perl-renameya prenameda diğer dağıtımlarda. Her zaman depolarda olmalı ve biri de perl ile kurulmalıdır .
terdon

@terdon Temel kullanımı perl ifadesi olan dosyaları yeniden adlandırmak için kullanılan bir komut Debian'a özgü değildir. Sadece çağrılmamış bir paketi açıkça talep etmeden çağrılan renameve kurulması muhtemelrename böyle bir komut Debian'a özgüdür. Diğer Linux dağıtımları komutu çağırır prenameveya perl-renameutil-linux ile karışıklığı önlemek renameve perl paketi ile paketlemez ve Linux adı altında gönderen renameveya bir herhangi bir ad altında varsayılan kurulum.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.