ฉันมีไฟล์จำนวนหนึ่งในโฟลเดอร์และฉันต้องการแทนที่อักขระเว้นวรรคทุกตัวในชื่อไฟล์ทั้งหมดด้วยเครื่องหมายขีดล่าง ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?
ฉันมีไฟล์จำนวนหนึ่งในโฟลเดอร์และฉันต้องการแทนที่อักขระเว้นวรรคทุกตัวในชื่อไฟล์ทั้งหมดด้วยเครื่องหมายขีดล่าง ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?
คำตอบ:
สิ่งนี้ควรทำ:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
PATH_TO_YOUR_DIRECTORY
ฉันชอบใช้คำสั่ง 'เปลี่ยนชื่อ' ซึ่งใช้ regexes สไตล์ Perl:
rename "s/ /_/g" *
คุณสามารถวิ่งแบบแห้งได้ด้วยแฟล็ก -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
ไม่มีใน OSX ปรากฏขึ้น
rename
พร้อมใช้งาน
ใช้ sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
หากคุณต้องการลองก่อนที่จะดึงทริกเกอร์เพียงแค่เปลี่ยนmv
เป็นecho mv
.
หากคุณใช้ทุบตี:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'สำหรับข้อมูลเพิ่มเติม
mv --help' for more information. mv: missing file argument Try
mv --help 'สำหรับข้อมูลเพิ่มเติม mv: ไม่มีอาร์กิวเมนต์ไฟล์ลองmv --help' for more information. mv: missing file argument Try
mv --help 'สำหรับข้อมูลเพิ่มเติม
จะเกิดอะไรขึ้นถ้าคุณต้องการใช้งานการแทนที่แบบวนซ้ำ ? คุณจะทำอย่างไร?
ฉันเพิ่งค้นพบคำตอบด้วยตัวเอง ไม่ใช่วิธีแก้ปัญหาที่หรูหราที่สุด (พยายามเปลี่ยนชื่อไฟล์ที่ไม่เป็นไปตามเงื่อนไข) แต่ใช้งานได้ (BTW ในกรณีของฉันฉันต้องการเปลี่ยนชื่อไฟล์ด้วย '% 20' ไม่ใช่ขีดล่าง)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
นี่คือวิธีแก้ปัญหาอื่น:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
ลองทำสิ่งนี้โดยสมมติว่าไฟล์ทั้งหมดของคุณเป็น. txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'สำหรับข้อมูลเพิ่มเติม
อ้างถึงตัวแปรของคุณ:
for file in *; do echo mv "'$file'" "${file// /_}"; done
ลบ "เสียงสะท้อน" เพื่อทำการเปลี่ยนชื่อจริง
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว mv: ไม่สามารถ stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
วิธีที่ง่ายที่สุดที่จะมาแทนที่สตริง (อักขระช่องว่างในกรณีของคุณ) กับสตริงอีกคือการใช้Linux
sed
คุณสามารถทำได้ดังนี้
sed -i 's/\s/_/g' *
หวังว่านี่จะช่วยได้
ในการเปลี่ยนชื่อไฟล์ทั้งหมดด้วยไฟล์ .py
นามสกุลให้ใช้
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
ตัวอย่างผลลัพธ์
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
1 - foo.jpg
และโฟลเดอร์ของฉันมีอยู่แล้ว1.jpg
ในนั้น