dấu gạch chéo (/) sau tên thư mục trên các lệnh shell


14

Tôi có một câu hỏi nhỏ ở đây.

Nếu tôi có hai tập tin, hãy nói fileafileb, mv filea filebsẽ

  • xóa bỏ fileb
  • đổi tên fileathànhfileb

Sau đó, nếu tôi có hai thư mục, nói diradirb, mv dira dirbsẽ

  • di chuyển diravào dirb(nó sẽ trở thành dirb/dira)

Lưu ý rằng trong cả hai trường hợp không có thông báo hoặc tin nhắn, thì điều này khá không phù hợp với tôi. Tôi nghĩ mv dira dirbchỉ nên ghi đè lên dirbvới nội dung của dira(hoặc hợp nhất hai thư mục trong một thư mục có tên dirb).

Tôi nhớ đã đọc ở đâu đó rằng một tên thư mục có dấu gạch chéo (như dira/) được xử lý như một thư mục và tên không có dấu gạch chéo (như dira) được xử lý như một tệp (tất nhiên là với một số phạm vi nhất định). Dù sao bây giờ tôi muốn làm cho shell (zsh và có thể là bash) tôn trọng ký hiệu của tôi về một thư mục bằng cách sử dụng dấu gạch chéo. Có một tùy chọn thiết bị đầu cuối cho phép tôi thực thi điều đó?

Để làm rõ, đây là hành vi mong muốn của tôi:

  • mv dira dirbkết quả dirblà bị ghi đè với nội dung củadira
  • mv dira dirb/kết quả diralà được chuyển vào dirb(trong dirb/dira)

Có ai nghĩ giống như tôi không? Hay tôi chỉ là lạ?


2
Tôi nghĩ rằng hành vi mong muốn của bạn sẽ khá nguy hiểm.
starblue

@starblue: vâng tôi đồng ý rằng điều đó nguy hiểm, nhưng tôi thích sống với thứ gì đó nguy hiểm hơn là sự không nhất quán
phunehehe

Câu trả lời:


11

Vâng, điều này hơi không nhất quán, ngay cả trong các công cụ GNU.

Một vấn đề với đề xuất của bạn là các thư mục không trống có thể bị xóa. Ngoài ra, -T(trong vùng đất GNU, dù sao) gần đúng với những gì bạn muốn (trường hợp đầu tiên):

$ 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

Bạn cũng có thể thêm một bí danh, ví dụ alias ren=mv -T.
Mikel

0

Nếu bạn chỉ muốn chuyển mọi thứ từ dira sang dirb, bạn có thể chạy mv dira/* dirb.

Theo trang mv man trên HP-UX của tôi.

The mv command moves:

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


3
Lệnh của bạn sẽ bỏ lỡ tất cả các dotfiles.
qbi

Ai cần tập tin dấu chấm nào;)
Robert Massaioli

1
Và nếu đó là một vấn đề, shopt -s dotglobtrong bash sẽ khắc phục điều đó.
David Z
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.