Aşağıdaki dosya gibi bir dizindeki dosyaları yeniden adlandırmak için:, PMC21375.pdf.txt
yeniden adlandırılması gerekiyor 21375.txt
. yani, her ikisini de PMC
ve pdf
her dosya adından kaldırmak gerekir .
Aşağıdaki dosya gibi bir dizindeki dosyaları yeniden adlandırmak için:, PMC21375.pdf.txt
yeniden adlandırılması gerekiyor 21375.txt
. yani, her ikisini de PMC
ve pdf
her dosya adından kaldırmak gerekir .
Yanıtlar:
İle perladlı 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 shell
istemi. Çok faydalı, birazperlbir ikame yaptığı gibi kod.
Sen kaldırabilirsiniz -n
Testlerinizi Geçersizlerin olunca (kuru işletilen modu anahtarını).
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 Debian
ve aşağıdaki gibi türev yapmak için Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
( komutunuzun /path/to/rename
yolunu değiştirin perl's rename
.
Son olarak, bu araç aslında Perl'in babası Larry Wall tarafından yazılmıştır.
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
.pdf
, dosya adından kaldırılmaz .
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 *txt
metin dosyalarının değiştirilmesini sınırlamak için kullandım .
rename
Linux kullanıyorsanız zaten mevcut olmalıdır. * BSD veya OS X çalıştırıyorsanız, önce yüklemeniz gerekebilir.
rename
. Biri util-linux
ve perl
farklı sözdizimine sahip bir tane var. Eğer gelen biri gibi görünüyor atıfta ediyoruz biri util-linux
bazen denir rename.ul
böylece ile karıştırılmamalıdır rename
gelen perl
diğer bazı sistemlerde, süre rename
util-linux gelen bir ve gelen biridir perl
denir prename
.
rename 's/PMC// *.txt
verename s/\.pdf// *.txt
Ö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
.
Bunu dene:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
j=${i//\.pdf/}
Araçlar yerine .pdf
de $i
hiçbir şey. Benzer şekilde, ikinci j ataması da PMC'den kurtulur.
Eğer kullanıyorsanız zsh
, bu tipik bir iştir zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
potansiyel çatışmaları incelikle ele alır).
.pdf
, dosya adından kaldırılmaz .