it-swarm-tr.com

Toplu yeniden adlandırma dosyaları

Görüntülerle dolu bir dizin var:

image0001.png
image0002.png
image0003.png
...

Ve bir astarın onları yeniden adlandırmasını istiyorum.

0001.png
0002.png
0003.png
...

Bunu nasıl yaparım?

157
Internet man

Bash veya POSIX uyumlu başka bir Kabuk kullanıyorsanız:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
110
W_Whalley

Debian ve türevlerinde, Perl'in renamesed ile benzer şekilde çalışır:

  rename -v 's/image//' *.png

Bunun yerine çalışan util-linux 'Dan rename var:

  rename image '' *.png
113
Internet man

zMV

Zsh Shell, zmv adlı güçlü bir toplu yeniden adlandırma komutuna sahiptir.

İlk önce zmv komutunu aşağıdaki gibi etkinleştirmeniz gerekir (bu ~/.zshrc İçine girebilir).

autoload zmv

Temel sözdizimi zmv PATTERN REPLACEMENT. Desen bir Shell glob ifadesidir. Desenin bölümleri parantez ile çevrelenebilir. Değiştirilen metin, örüntüdeki N. Parantez grubuna atıfta bulunmak için $1, $2 Vb. İçerebilir. Örneğin:

zmv 'image(*.png)' '$1'

Ayrıca zsh'den kalıptaki joker karakterlerle eşleşmesi için otomatik olarak $1, $2 Vb. Tanımlamasını isteyebilirsiniz:

zmv -w 'image*.png' '$1.png'

Normalde bu kullanım için Nice ve basit mmv ( man page ) yardımcı programını kullanıyorum:

$ mmv "image*.png" "#1.png"

görevinizi yerine getirecektir.

Hedef desendeki #1, Kaynak desendeki joker karakterle eşleşenle değiştirilecek. Bu aynı zamanda birkaç joker karakter için de geçerlidir ve örneğin dosya adlarının parçalarının sırasını değiştirmek için kullanılabilir. Küçük harfleri büyük harflere dönüştürmek gibi daha karmaşık işleri de kolayca yapabilirsiniz.

Alıntı yaparak desenleri Kabuktan koruduğunuzdan emin olun.

34
Marcel Stimberg

Döngü için POSIX sh

Yeniden adlandırmak için sed kullanır

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done
10
X Tian

Perl'i çok seviyorum:

Perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

Aynı kalıbı, dosyaları başka bir dizine kopyalamak gibi diğer görevler için de kullanabilirsiniz:

Perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
6
gvkv

qmv

qmv 'dan renameutils komutu, bir sekme ile ayrılmış iki sütunlu dosya adlarının listesini gösteren bir düzenleyici açar. Her satır, her iki sütunda da aynı olan dosya adlarından birini gösterir. Sağ sütun dosyaların yeni adlarını temsil eder.
Değişiklik yapmak için sağ taraftaki adları düzenleyin. Bu örnekte, :%s/... veya görsel blok modu yardımcı olur.

Düzenleyicinizdeki dosya adları

$ qmv *.png

Editörde:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

Sağ sütundaki adları düzenleyin:
(Görsel blok modunu kullanarak image önekini tüm satırlardan kaldırma)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

Yeniden adlandırma günlüğü:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(örneğin Ubuntu: apt-get install renameutils)

6
Volker Siegel

özyinelemeli

kolay seçim resim * png dosyalarını seçer ve dosya adlarında yeni satırla başa çıkmaya gerek olmadığını varsayar

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

Güvenli, boşluklar, yeni çizgiler, ters eğik çizgiler ve başka bir şeyle başa çıkabilir:

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done
3
X Tian

Kabuk destek genişletmesi :

for N in {0001..1000}; do mv "{image,}$N.png"; done
2
αғsнιη

Dosyaları/dizinleri düzenli ifadelerle güvenle yeniden adlandırmak için pratik bir platformlar arası komut satırı aracı olan brename ( https://github.com/shenwei356/brename ) deneyin. ).

@ patrickDurusa dedi:

Linux'un çeşitli toplu dosya yeniden adlandırma seçenekleri var, ancak brename'de bana atlayan herhangi bir kısa çizgi görmedim.

Özellikleri:

  • Çapraz platform . Windows, Mac OS X ve Linux desteği.
  • Güvenli . potansiyel çakışmaları ve hataları kontrol etmek.
  • Dosya filtreleme . Düzenli ifade ile dosyaları dahil etme ve hariç tutma desteği. find ./ -name "*.html" -exec CMD Gibi komutları çalıştırmanıza gerek yok.
  • Anahtar-değer dosyası aracılığıyla karşılık gelen değere sahip alt eşlemeyi yeniden adlandırma.
  • Artan tamsayı ile yeniden adlandırma .
  • Hem dosyaları hem de dizinleri yinelemeli olarak yeniden adlandırma .
  • Kuru çalışmayı destekleme .
  • Renkli çıktı .

Komut:

$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed
1
Wei Shen

While döngüsü kullanarak POSIX sh

find komutundan isimleri okuma.

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

Bir dosyadan adları okuma

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist
1
X Tian

Windows ve linux için bu Perl betiği ; bu durumda:

$ rnm -l 's/^image//' '*.png'

Komut dosyası dizinler altında yinelemeli olarak çalışabilir ve hatta hepsine bir sayım ekleyebilir:

$ rnm -r 's/^/$counter./' '/\.png$/'

UTF-8 karakterleri, hem Windows hem de Linux'ta doğru şekilde işlenir.

1
circulosmeos

Bu aracı kullanabilirsiniz: rnm ( web sayfası )

Sizin durumunuz için komut şöyle olacaktır:

rnm -rs '/^image//' *.png

Daha fazla örnek/doküman bulabilirsiniz burada .

0
Jahid