เครื่องหมายทับ (/) หลังชื่อไดเร็กทอรีบนคำสั่งเชลล์


14

ฉันมีคำถามเล็กน้อยที่นี่

ถ้าผมมีสองไฟล์พูดfileaและfileb, mv filea filebจะ

  • ลบ fileb
  • เปลี่ยนชื่อfileaเป็นfileb

แล้วถ้าฉันมีสองไดเรกทอรีพูดdiraและdirb, mv dira dirbจะ

  • ย้ายdiraเข้าไปdirb(มันจะกลายเป็นdirb/dira)

สังเกตว่าในทั้งสองกรณีไม่มีการบอกกล่าวหรือข้อความแล้วนี่มันค่อนข้างจะขัดแย้งกับฉัน ฉันคิดว่าmv dira dirbควรเขียนทับdirbเนื้อหาของdira(หรือรวมสองไดเรกทอรีภายใต้ชื่อไดเรกทอรีdirb)

ฉันจำได้ว่าอ่านบางที่ว่าชื่อไดเรกทอรีที่มีเครื่องหมายทับ (เหมือนdira/) ถือว่าเป็นไดเรกทอรีและชื่อที่ไม่มีเครื่องหมายทับ (เหมือนdira) จะถือว่าเป็นไฟล์ (ไปยังขอบเขตที่แน่นอน) ตอนนี้ฉันต้องการทำให้เชลล์ (zsh และอาจทุบตี) เคารพเครื่องหมายของไดเรกทอรีโดยใช้เครื่องหมายทับ มีตัวเลือกเทอร์มินัลที่ทำให้ฉันสามารถบังคับใช้ได้หรือไม่?

เพื่อชี้แจงนี่คือพฤติกรรมที่ฉันต้องการ:

  • mv dira dirbผลลัพธ์dirbจะถูกเขียนทับด้วยเนื้อหาของdira
  • mv dira dirb/ผลลัพธ์ในdiraการถูกย้ายเข้าdirb(ในdirb/dira)

มีใครคิดแบบเดียวกับฉัน หรือฉันแค่แปลก ๆ ?


2
ฉันคิดว่าพฤติกรรมที่คุณต้องการจะค่อนข้างอันตราย
starblue

@ starblue: ใช่ฉันยอมรับว่ามันเป็นสิ่งที่อันตราย แต่ฉันอยากจะอยู่กับสิ่งที่เป็นอันตรายมากกว่าความไม่สอดคล้องกัน
phunehehe

คำตอบ:


11

ใช่มันไม่สอดคล้องกันแม้แต่น้อยในเครื่องมือ GNU

ปัญหาอย่างหนึ่งของข้อเสนอของคุณคือไม่สามารถลบไดเรกทอรีที่ไม่ว่างออกได้ นอกเหนือจากนี้,-T (ในที่ดิน GNU อย่างไรก็ตาม) ใกล้เคียงกับสิ่งที่คุณต้องการ (ในกรณีแรก):

$ ls dira/ dirb/
dira/:
a

dirb/:
b
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
mv: cannot move `dira/' to `dirb/': Directory not empty
$ rm dirb/b 
$ mv -iT dira/ dirb/
mv: overwrite `dirb/'? y
$ ls dira/ dirb/
ls: cannot access dira/: No such file or directory
dirb/:
a

alias ren=mv -Tนอกจากนี้คุณยังสามารถเพิ่มชื่อแทนเช่น
Mikel

0

ถ้าคุณเพียงต้องการที่จะย้ายทุกอย่างจาก dira เพื่อ dirb mv dira/* dirbคุณสามารถเรียกใช้

ตามหน้า mv บน HP-UX ของฉัน

The mv command moves:

+ One or more directory subtrees (directory1, [directory2, ...]) to a new or existing directory (dest-directory).


3
คำสั่งของคุณจะพลาด dotfiles ทั้งหมด
qbi

ใครต้องการไฟล์ dot อยู่แล้ว)
Robert Massaioli

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