วิธีการเปลี่ยนชื่อไฟล์ในไดเรกทอรีเช่นแฟ้มต่อไปนี้: ฉันจะต้องมีการเปลี่ยนชื่อเป็นPMC21375.pdf.txt
21375.txt
เช่นฉันต้องการลบทั้งสองPMC
และpdf
จากแต่ละชื่อไฟล์
วิธีการเปลี่ยนชื่อไฟล์ในไดเรกทอรีเช่นแฟ้มต่อไปนี้: ฉันจะต้องมีการเปลี่ยนชื่อเป็นPMC21375.pdf.txt
21375.txt
เช่นฉันต้องการลบทั้งสองPMC
และpdf
จากแต่ละชื่อไฟล์
คำตอบ:
rename 's/(PMC|\.pdf)//g' *pdf.txt
การสาธิต :
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
จากshell
พรอมต์ มันมีประโยชน์มากคุณสามารถใส่รหัสPerlอย่างที่ฉันทำในการทดแทน
คุณสามารถลบ-n
(สวิตช์โหมดแห้ง) เมื่อการทดสอบของคุณกลายเป็นหุบเขา
มีเครื่องมืออื่น ๆ ที่มีชื่อเดียวกันซึ่งอาจหรืออาจจะไม่สามารถทำได้ดังนั้นควรระมัดระวัง
หากคุณเรียกใช้คำสั่งต่อไปนี้ ( linux
)
$ file $(readlink -f $(type -p rename))
และคุณมีผลลัพธ์เช่นเดียวกับ
.../rename: Perl script, ASCII text executable
นี่น่าจะเป็นเครื่องมือที่ถูกต้อง =)
หากไม่ต้องการให้เป็นค่าเริ่มต้น (โดยปกติจะเป็นตัวพิมพ์ใหญ่) Debian
และอนุพันธ์เช่นUbuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(แทนที่/path/to/rename
เส้นทางของperl's rename
คำสั่งของคุณ
สุดท้ายนี้ต้องไม่ใช้เครื่องมือนี้เขียนโดย Larry Wall พ่อของ Perl
นอกจากคำสั่งเปลี่ยนชื่อคุณสามารถทำได้โดยตรงในทุบตี (หนึ่งในหลาย ๆ วิธี):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
แก้ไขเพื่อแสดง Pinyaka มันทำงานอย่างไร:
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
ชื่อไฟล์ออก
มีสาธารณูปโภคหลายสำหรับการเปลี่ยนชื่อไฟล์เป็น rename
แต่หนึ่งในที่ง่ายในการใช้งาน ในกรณีของคุณคุณสามารถทำได้:
rename PMC '' *txt
rename .pdf '' *txt
พารามิเตอร์แรกคือส่วนของชื่อไฟล์ที่จะแทนที่ พารามิเตอร์ที่สองคือสตริงการแทนที่ ที่นี่ฉันใช้''
เพื่อเป็นตัวแทนของสตริงว่าง พารามิเตอร์ทั้งหมดต่อไปนี้เป็นไฟล์ที่จะเปลี่ยนชื่อที่นี่ฉันใช้*txt
เพื่อ จำกัด การแทนที่ไฟล์ข้อความ
rename
ควรมีอยู่แล้วหากคุณใช้งาน Linux หากคุณใช้งาน * BSD หรือ OS X คุณอาจต้องติดตั้งก่อน
rename
GNU มีหนึ่งรายการจากหนึ่งรายการutil-linux
และperl
มีไวยากรณ์ที่แตกต่าง สิ่งที่คุณกำลังอ้างถึงดูเหมือนเป็นสิ่งutil-linux
ที่เรียกว่าบางครั้งเรียกว่าrename.ul
เพื่อไม่ให้สับสนกับrename
จากperl
ในขณะที่ในระบบอื่น ๆ บางอย่างrename
เป็นหนึ่งจาก util-linux และคนที่perl
เรียกว่าprename
จาก
rename 's/PMC// *.txt
และrename s/\.pdf// *.txt
ก่อนทำการสำรองไฟล์ของคุณ! โดยทั่วไปแล้วคุณสามารถใช้ python หนึ่งซับในไดเรกทอรีปัจจุบันด้วยรูปแบบทั่วไป:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
ในกรณีเฉพาะของคุณคุณสามารถใช้สองครั้ง:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
เพื่อลบ.pdf
และอีกครั้ง:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
PMC
เพื่อลบ
ลองสิ่งนี้:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
j=${i//\.pdf/}
หมายถึงการทดแทน.pdf
ใน$i
มีอะไร เช่นเดียวกันกับการมอบหมาย j ครั้งที่สองเพื่อกำจัด PMC
หากคุณกำลังใช้zsh
งานนั่นเป็นงานปกติสำหรับzmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
จัดการกับความขัดแย้งที่อาจเกิดขึ้นได้อย่างสวยงาม)
.pdf
จากชื่อไฟล์