2017-12-12 108 views
6

Bazı dosyaları bir bash komutunu kullanarak yeniden adlandırmaya çalışıyorum, ancak bir ifade ifadesine aritmetik ifadeyi/matematik işlemini nasıl ekleyeceğimi bilmiyorum.Matematik işlemlerini kullanarak dosyaları yeniden adlandırma

Girdi:

a000.png 
a001.png 
... 

Çıkışı:

a010.png 
a011.png 
... 

Ben isimlere 10 eklemeye çalışıyorum.

Bazı şeyler denedim:

rename -n -e 's/a(\d+).png/a$1 + 10.png/' * 
rename -n -e 's/a(\d+).png/a{$1 + 10}.png/' * 
rename -n -e 's/a(\d+).png/a$($1 + 10).png/' * 

Bunu yapmak için basit bir yolu var mı?

+0

hüner 'rename' komut yerine' bash' kabuk sözdizimi yerine, 'perl' sözdizimi kullanır. Bunu detaylandırmak/ifade etmek için elimde iyi ve kapsamlı bir kaynağım yok, fakat yaptığım zaman cevabımı ekleyeceğim. –

+0

Harici bir siteye bağlantı vermekte tereddüt ediyorum; Orada çok sayıda rehber var (google arama). Bir başlangıç ​​olarak, 'perlre' kullanarak bir genel bakış elde edebilirsiniz. –

cevap

5

Bu hile yapmalıdır. Öndeki sıfır istemiyorsanız, sprintf'un yanı sıra "%03d" biçim dizesini kaldırabilirsiniz. Ayrıca, yeniden adlandırılacak olan dosyalar her zamana ile başlayacaksa, ön karakterini a tam karakteriyle tamamlayabilirsiniz. Son olarak, * dosya belirteci yeterli olsa da, ek güvenlik önlemi olarak bir uzantıyı takip etmenizi tavsiye ederim (ör. *.png). Burada

As always, try it out first using the -n flag to verify the rename is correct.

rename -v 's/([a-zA-Z]*)([0-9]*)/$1.sprintf("%03d",$2+10)/e' * 
+0

Tamlık için, [Unix & Linux] üzerinde bir * benzer * (kopya değil) iş parçacığı vardır (https://unix.stackexchange.com/questions/47006/trying-to-do-arithmetic-in-perl-rename -tool-debian) konuya ışık tutabilir. –

+0

Çalıştı, ancak çok fazla dosyam varsa, şu hatayı alıyorum: "a001.png yeniden adlandırılmamış: a011.png zaten var". Ben her şeyi "bXXX.png" ve daha sonra 'aXXX.png' olarak yeniden adlandırmak mümkün oldu, ama daha basit bir yolu var mı? Ben ters sırayla isimleri sıralama çalışacak "ls | sort -r | yeniden adlandır ... ", ama yapmadı. – klaus

+2

@klaus - Ben bu soruna girip girmeyeceğini merak ediyordum ... _does_ işini tersine çevirmek için' ls | sort -r' çözüm, ama aynı zamanda '' '' '' isminin 'komutunun sonundan kaldırılır çünkü yalnızca isimler argüman olarak belirtilmezse STDIN'den dosya isimlerini okur. –

İlgili konular