มีวิธีการดำเนินการ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/pathmv 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ออกจากที่นั่นได้?