Dizindeki dosyaları yeniden adlandırın


10

Aşağıdaki dosya gibi bir dizindeki dosyaları yeniden adlandırmak için:, PMC21375.pdf.txtyeniden adlandırılması gerekiyor 21375.txt. yani, her ikisini de PMCve pdfher dosya adından kaldırmak gerekir .

Yanıtlar:


9

İle adlı kullanıcının rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Demo:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

dan shellistemi. Çok faydalı, birazbir ikame yaptığı gibi kod.

Sen kaldırabilirsiniz -nTestlerinizi Geçersizlerin olunca (kuru işletilen modu anahtarını).

uyarı Bunu yapabilen veya yapamayan aynı ada sahip başka araçlar da vardır, bu yüzden dikkatli olun.

Aşağıdaki komutu çalıştırırsanız ( linux)

$ file $(readlink -f $(type -p rename))

ve şöyle bir sonucun var

.../rename: Perl script, ASCII text executable

o zaman bu doğru araç gibi görünüyor =)

Değilse, varsayılan (genellikle zaten durum) yapmak Debianve aşağıdaki gibi türev yapmak için Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

( komutunuzun /path/to/renameyolunu değiştirin perl's rename.


Son olarak, bu araç aslında Perl'in babası Larry Wall tarafından yazılmıştır.


Bu .pdf, dosya adından kaldırılmaz .
William Everett

Gönderi buna göre düzenlendi.
Gilles Quenot

5

Yeniden adlandırma komutunun yanı sıra doğrudan bash'da da yapabilirsiniz (çoğunun sadece bir yolu):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Pinyaka'ya nasıl çalıştığını göstermek için düzenlendi:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

Bu .pdf, dosya adından kaldırılmaz .
William Everett

Bunu denediniz mi? çünkü benim için öyle. Düzenlemede gösterilir.
hmontoliu

Benim hatam. Büyük harfleri dönüştüreceğini düşündüm. Upvoted.
William Everett

4

Dosyaları yeniden adlandırmak için birkaç yardımcı program vardır, ancak kullanımı en kolay olanlardan biridir rename. Sizin durumunuzda, muhtemelen şunları yapabilirsiniz:

rename PMC '' *txt
rename .pdf '' *txt

İlk parametre, dosya adının değiştirilecek kısmıdır. İkinci parametre, değiştirilen dizedir. Burada ''boş dizeyi temsil etmek için kullanıyorum . Aşağıdaki tüm parametreler yeniden adlandırılacak dosyalardır, burada *txtmetin dosyalarının değiştirilmesini sınırlamak için kullandım .

renameLinux kullanıyorsanız zaten mevcut olmalıdır. * BSD veya OS X çalıştırıyorsanız, önce yüklemeniz gerekebilir.


GNU olduğunu hiç sanmıyorum rename. Biri util-linuxve perlfarklı sözdizimine sahip bir tane var. Eğer gelen biri gibi görünüyor atıfta ediyoruz biri util-linuxbazen denir rename.ulböylece ile karıştırılmamalıdır renamegelen perldiğer bazı sistemlerde, süre renameutil-linux gelen bir ve gelen biridir perldenir prename.
Stéphane Chazelas

1
Benimki util-linux'dan. Yanlışlıkla bunun GNU coreutils'in bir parçası olduğunu düşündüm.
wingedsubmariner

Yeniden adlandırmanın varsayılan Debian sürümü böyle bir şey olurdu rename 's/PMC// *.txtverename s/\.pdf// *.txt
William Everett

1

Öncelikle dosyalarınızı yedekleyin! Daha sonra temel olarak, geçerli dizinde genel formla bir python tek astar kullanabilirsiniz:

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

özel durumunuzda, bunu iki kez kullanabilirsiniz:

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

kaldırmak için .pdf:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

kaldırmak için PMC.


0

Bunu dene:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

j=${i//\.pdf/}Araçlar yerine .pdfde $ihiçbir şey. Benzer şekilde, ikinci j ataması da PMC'den kurtulur.


0

Eğer kullanıyorsanız zsh, bu tipik bir iştir zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmvpotansiyel çatışmaları incelikle ele alır).

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.