Unix: Dosya adlarında arayın ve değiştirin


0

Kullanarak sed, bir dosyadaki metni arayabilir ve değiştirebilirsiniz. Dosya adlarında arama yapıp değiştirebileceğim bir yol var mı? Örneğin, aşağıdaki gibi adlara sahip bir klasörde bir sürü dosyam varsa:

  • foo01
  • foo02
  • bar001
  • bar002

Foo ile başlayanları hızlıca yeniden adlandırmak istiyorum, böylece 2 yerine 3 rakamı olur.

Yanıtlar:


2
#!/bin/bash
shopt -s nullglob
for file in foo*
do
  filename=${file%%[0-9]*}
  num=${file##*[^0-9]}
  newnum=$(printf "%03d" $num)
  newfile=${filename}${newnum}
  mv "$file" "$newfile"
done

1
Vay. Bütün bunlar ne işe yarıyor?
Svish

Bir göz atın @Svish Gelişmiş Bash Scripting Guide tldp.org/LDP/abs/html/index.html
KeithB

@KeithB: Sadece birkaç satırlık bir senaryoyu deşifre etmek için bir kitap okumak gibi hissetmeyin ...
Svish


Kendimi düzenlemek için yeterli temsilci yok, ancak ${f%%5. satırda olmalıdır${file%%
Svish

1

Sisteminizde renameveya olarak adlandırılan bir Perl betiği var prename.

rename 's/\d\d$/0$&/' foo*

Bunu birkaç kez çalıştırırsanız, sıfırlar eklemeye devam eder. Bunu önlemek için, bu sürüm yalnızca iki basamakta biten dosyaları yeniden adlandırır (önce en az bir rakam olmayan):

rename 's/([^\d])(\d\d)$/${1}0$2/' foo*
  • s/// ikame komutu
  • \d basamak için duruyor
  • $& ilk örnekte, ilk iki eğik çizgi arasında eşleşen her şeyi (bu durumda iki rakam) gösterir.
  • [^\d][]( ^) basamak ( \d) olmayan tüm karakterleri ( ) belirtir
  • ${1} ilk parantez kümesinde neyin eşleştirildiğini (rakamsız) gösterir, parantez "0" harfini "0" harfinden çıkarır
  • $2 İkinci parantez kümesinde neyin eşleştiğini gösterir (iki basamaklı), parantezler burada gerekli değildir, ancak bunları kullanabilirsiniz.

Tam olarak istediğim gibi görünüyor. Ne yazık ki Mac OS X'te görünmüyor X = /
Svish

1

Eğer kullanırsanız MacPorts adlı bir paket var renameutils . Hiç kullanmadım, ama açıklamadan istediğin olabilir.

renameutils - dosyaları yeniden adlandırmayı kolaylaştıran araçlar Açıklama ¶

renameutils 5 program içerir: qmv, qcp, imv, icp ve deurlname

qmv ve qcp, dosya kaydedildiğinde yürütülen bir "plan" oluşturmak için metin editörünün yardımını kullanır - toplu işlemler için harikadır

imv ve icp GNU readline desteğine sahip etkileşimli programlardır.

deurlname URL ile kodlanmış karakterleri dosya adından siler

Projenin ana sayfasında daha fazla bilgi http://www.nongnu.org/renameutils/


İlginç. Buna bir zaman bakacağız :)
Svish

0

Bir göz atın mmv(her türlü Linux için erişilebilir olmalıdır, ancak varsayılan olarak nadiren kurulur).

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.