มีวิธีการดำเนินการmv
คำสั่งใด ๆโดยไม่ต้องพิมพ์เส้นทางแบบเต็มในการโต้แย้งที่สอง?
ตัวอย่าง:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
มีวิธีการดำเนินการmv
คำสั่งใด ๆโดยไม่ต้องพิมพ์เส้นทางแบบเต็มในการโต้แย้งที่สอง?
ตัวอย่าง:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
คำตอบ:
คุณสามารถใช้การขยายรั้งของ bash นี้:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
จะขยายเป็น:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
จากนั้นmv
จะรันด้วยอาร์กิวเมนต์สองตัวนั้น ดูhttp://wiki.bash-hackers.org/syntax/expansion/braceสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการขยายรั้ง
คุณสามารถใช้คุณลักษณะการขยายประวัติของ bash shell ได้แทน:
!
แนะนำการขยายประวัติ#
ตัวกำหนดเหตุการณ์แสดงถึงคำสั่งปัจจุบัน$
ตัวออกแบบคำที่อ้างถึงอาร์กิวเมนต์สุดท้าย คุณสามารถทำการทดแทนในการขยายตัวโดยใช้s/pattern/replacement
ไวยากรณ์เหมือนเช่นเช่น
somecommand path/to/foo.bar !#$:s/.bar/.baz
อดีต
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
หากคุณต้องการพา ธ โดยเฉพาะ (ตัวอย่างเช่นไปยังmv
ไฟล์ที่มีชื่อแตกต่างไปจากเดิมอย่างสิ้นเชิงที่ไม่ได้มาจากการทดแทน) คุณสามารถใช้โมดิh
ฟายเออร์:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
สำหรับตัวเลือกอื่น ๆ รวมถึงreadline
คีย์ผสมเพื่อดึงอาร์กิวเมนต์สุดท้ายดูวิธีการพิมพ์พารามิเตอร์ใน bash console ซ้ำในปัจจุบันได้อย่างไร
คุณอาจลอง:
pushd .
cd /really/long/directory/name/
mv whatever.1 whatever.2
popd
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
ในหนึ่งบรรทัด: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cd
ไปยังไดเรกทอรีที่คุณต้องการทำงานใน:cd ./really/long/path
mv foo.bar foo.bz
ในหนึ่งบรรทัด: cd ./really/long/path && mv foo.bar foo.bz
&&
ในหนึ่งซับสุดท้าย มิฉะนั้นหากcd
ล้มเหลวไฟล์mv
จะทำงานในไดเรกทอรีที่ไม่ถูกต้องอาจเขียนทับไฟล์ ด้วยcd ./really/long/path && mv foo.bar foo.baz
, mv
จะได้รับการทำงานถ้าcd
ประสบความสำเร็จในการเปลี่ยนไดเรกทอรี
คุณสามารถใช้คำสั่ง alias เพื่อย่อชื่อไดเรกทอรี:
alias src='/directory/name/of/source'
alias dst='/directory/name/of/destination'
mv src dst
alias test='/var/log' ; cd test
-bash: cd: test: No such file or directory
cd
ไปยังไดเรคทอรีและmv
ออกจากที่นั่นได้?