ฉันจะใช้ BASH เพื่อเปลี่ยน“ A” Train.flac เป็น 'A' Train ในชื่อไฟล์ได้อย่างไร


1

ฉันได้ลองชุดเครื่องหมายแบ็กสแลชและดอกจันและวงเล็บปีกกาทุกครั้งดูเหมือนว่าไม่มีอะไรทำงาน ฉันใช้เทอร์มินัลใน OS X และฉันจะซาบซึ้งจริงๆถ้ามีใครสามารถคัดท้ายฉันตรงๆ


คุณหมายถึงอะไร คุณกำลังเปลี่ยน "เป็น" และ / หรือลบ. flac หรือไม่คุณพยายามทำให้คำสั่งนี้เป็นกลุ่มหรือเพียงแค่ไฟล์เดียว?
evan.bovie

ขอบคุณที่อ่อนน้อมถ่อมตนของฉันต่อ STATUS__ACCESS สิ่งนี้เริ่มต้นเนื่องจาก Windows ไม่ชอบ "บนไดรฟ์เครือข่าย Mac OS X อาจเป็นเพราะการเปลี่ยนแปลงบางอย่างใน Lion ฉันคิดว่า (ผิด) ว่านี่จะเป็นโอกาสที่จะได้เรียนรู้เพิ่มเติมเกี่ยวกับ BASH scripting ด้วยการเปลี่ยนชื่ออย่างรวดเร็ว
zoltanzylox

คำตอบ:


0

คุณสามารถใช้ $() เพื่องาน tr เพื่อทำการแปลงนั้นแล้วแถบนามสกุลไฟล์ในขั้นตอนที่สอง มันจะมีลักษณะคล้ายกับ:

# Say FNAME is the variable that stores your original file name
# Convert the double quotes to single quotes:
SQFNAME=$(echo $FNAME|tr '""' "''")
# or, as an alternative in pure Bash (mind the shell character escaping):
SQFNAME=echo ${FNAME//\"/\'}
# then simply strip the extension
NEWFNAME=${SQFNAME%.flac}
# or, if you wanted to remove the extension delimited by the _last_ dot
NEWFNAME=${SQFNAME%.*}
# or, if you wanted to remove the extension delimited by the _first_ dot
NEWFNAME=${SQFNAME%%.*}

ชื่อไฟล์ที่แปลง "ใหม่" จะอยู่ใน NEWFNAME ตอนนี้ตัวแปร


พิสูจน์แนวคิด:

#!/usr/bin/env bash
FNAME="\"A\" Train.flac"
echo "Unchanged name: $FNAME"
SQFNAME=${FNAME//\"/\'}
echo "Converted quotes: $SQFNAME"
NEWFNAME=${SQFNAME%.flac}
echo "New file name: $NEWFNAME"

ผลการดำเนินการ:

$ bash test.sh
Unchanged name: "A" Train.flac
Converted quotes: 'A' Train.flac
New file name: 'A' Train

1

ฉันจะใช้ prename Perl สคริปต์ที่มาพร้อมกับการติดตั้ง Perl ส่วนใหญ่ (เชื่อมโยงกับ rename ในเช่น การแจกแจงตามเดเบียน แต่ใช้เช่น Fedora อีก rename มีอยู่ดังนั้นให้ทำการตรวจสอบกรณีก่อนหากคุณไม่แน่ใจหรือเพียงแค่ใช้ prename ดังต่อไปนี้):

prename 's/"/'\''/g' \"A\"\ Train.flac

เครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสม

เพื่อให้ได้ตัวอักษร 'ฉันจะหยุดสภาพแวดล้อมการอ้างอิงปัจจุบันก่อนจากนั้นหลบหนี 'จากนั้นเริ่มสภาพแวดล้อมการอ้างอิงอีกครั้ง


ฉันเดาว่าคุณไม่ต้องการดึงส่วนขยายของชื่อไฟล์และคำถามนั้นเป็นคำที่คลุมเครือ แต่ถ้าคุณ:

prename 's/"/'\''/g; s/\..*$//' \"A\"\ Train.flac

หรือ

prename 's/"/'\''/g; s/\.flac$//' \"A\"\ Train.flac

ใช้ -n เปลี่ยนเป็นเพียงแค่ดูการเปลี่ยนแปลงโดยไม่ต้องใช้ถ้าคุณต้องการทดสอบคำสั่งล่วงหน้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.