ฉันรู้วิธีเปลี่ยนชื่อไฟล์ใน Unix:
$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh
^-------this part------^ ^------this part-------^
ใช้เวลานานเกินไปในการทำซ้ำ~/folder/subfolder/fileสองครั้ง
มีวิธีที่เร็วกว่านี้ไหม
ฉันรู้วิธีเปลี่ยนชื่อไฟล์ใน Unix:
$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh
^-------this part------^ ^------this part-------^
ใช้เวลานานเกินไปในการทำซ้ำ~/folder/subfolder/fileสองครั้ง
มีวิธีที่เร็วกว่านี้ไหม
คำตอบ:
ถ้าเปลือกของคุณได้รับการสนับสนุน รั้งการขยายตัว (ทำงานร่วมกับcsh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yashกับรั้งขยายเปิดการใช้งานโดยการเรียกyash --brace-expandหรือตั้งในเปลือก Interative ด้วยset -o brace-expandหรือfish):
mv ~/folder/subfolder/file.{txt,sh}
renameผมไม่คิดว่านี่เป็นความคิดที่ดีโดยเฉพาะอย่างยิ่งเนื่องจากมีทางออกที่ดีมากใช้
renameเป็นทางออกที่ดีกว่าเพราะrenameอย่าขอให้คุณแทนที่ไฟล์ที่มีอยู่หรือไม่
คุณสามารถใช้rename(ส่วนหนึ่งของแพคเกจ util-linux)
rename .txt .sh ~/folder/subfolder/file.txt
ดูหน้าเปลี่ยนชื่อคนสำหรับรายละเอียดเพิ่มเติม
{a,b}ฟังก์ชั่นของเชลล์
renameเป็นโปรแกรมแบบ perl-based ที่แตกต่างอย่างสิ้นเชิง rename 's/txt$/sh/' ~/folder/subfolder/file.txtมีคุณจะใช้
mmvกัน
ทั้งหมดที่กล่าวมาเป็นสิ่งที่ดี สิ่งนี้จะได้ผล:
( cd ~/folder/subfolder && mv file.txt file.sh )
sudoส่วนออก
sudo?
sudoมันตีความ~ว่าเป็นโฮมไดเรกทอรีของรูท
sudomvcdsudo(
ไม่คุณต้องให้เส้นทางแบบเต็มไปยังไฟล์เพื่อเปลี่ยนชื่อ ทางเลือกเดียวคือย้ายไปยังโฟลเดอร์เป้าหมายก่อนเรียกใช้mv:
cd ~/folder/subfolder/
mv file.txt file.sh
หรือคุณสามารถเขียนฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่เปลี่ยนชื่อไฟล์ในไดเรกทอรีเป้าหมาย ตัวอย่างเช่นเพิ่มบรรทัดเหล่านี้ในไฟล์การเริ่มต้นเชลล์ของคุณ ( ~/.bashrcถ้าคุณใช้bash):
lmv(){
_path=$(dirname -- "$1")
_target="${_path%/}/$2"
mv -- "$1" "$_target"
}
จากนั้นเปิดเทอร์มินัลใหม่หรือเพียงแค่เรียกใช้source ~/.bashrcเพื่ออ่านไฟล์ init ใหม่และคุณสามารถทำได้:
lmv ~/folder/subfolder/file.txt file.sh
lmv()ฟังก์ชั่น ฉันไม่รู้ว่า :)
เพียงเพื่อขยายประโยชน์ของคำตอบของ cuonglm (เพื่อไม่ให้เครดิตใด ๆ ในขณะที่ฉันรักทางออกของเขา) และคำตอบของเขานั้นถูกต้อง
กรณีการใช้งานคือเรามักจะต้องการ mv ไฟล์ในสถานที่ห่างไกล (ปัญหาจริง) เช่น /folder/subfolder/configFile.dat TO configFile.dat.orig
คำสั่งรูปแบบนี้เพิ่มนามสกุลไฟล์ (ไม่แทนที่นามสกุลเดิม)
mv ~/folder/subfolder/file.txt{,.orig}
อธิบาย: "{, .orig}" หมายถึงแทนที่ (ไม่มี) ในตอนท้ายของชื่อไฟล์ด้วย (อะไร) ".orig"
หรือเพื่อลบนามสกุลไฟล์ (ย้อนกลับเปลี่ยนชื่อ)
mv ~/folder/subfolder/file.txt{.orig,}
หมายเหตุ: ยังอยู่ในหัวข้อ "วิธีที่รวดเร็วที่สุดในการเปลี่ยนชื่อไฟล์โดยไม่ต้องพิมพ์เส้นทาง dir ใหม่"
ใช่. ถ้าคุณใช้คุณทำbashsudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd
popdซึ่งเป็นจริงที่ใหญ่กว่าและอาจล้มเหลวถ้าคุณสูญเสียสิทธิ์การเข้าถึงไดเรกทอรีเดิมเมื่อคุณทำ
pushdและpopdที่นี่คืออะไร ดีกว่านี้cd ~/folder/subfolder/ && sudo mv file.txt file.shอย่างไร?
pushd popdที่จะใช้และกลับไปกับcd cd -
popdดีกว่าcd ../../เมื่อมี
(cd /path/to/there && mv x y)ตอนนั้น (พร้อมกับ subshell)
sudo ดังนั้นคำสั่งเต็มรูปแบบที่ควรจะเป็นpushd pushd ...dir && sudo mv old new && popdทางเลือกหนึ่งอาจทำได้(cd ...dir; sudo mv old new)เนื่องจากการทำงานใน subshell จะดูแลการเปลี่ยนแปลงไดเรกทอรีโดยอัตโนมัติ