Lệnh Mac Terminal tìm thấy lệnh: Dấu gạch chéo kép trong kết quả đầu ra có ý nghĩa gì?


9

Tôi sử dụng lệnh find để tìm kiếm trong các cấu trúc thư mục lớn và lồng nhau.

Trong kết quả đầu ra đôi khi có một dấu gạch chéo kép (//).

Ví dụ (sau "Tải xuống"):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

Đầu tiên tôi nghĩ rằng nó sẽ đánh dấu thư mục làm việc hiện tại. Nhưng đó không phải là trường hợp.

Ý nghĩa của dấu gạch chéo kép này là gì?

Thông thường tôi sao chép kết quả vào bảng tạm, đổi sang công cụ tìm. Sau đó "shift" + "lệnh" + "g" và dán đường dẫn (cho đến khi tệp) vào hộp. Vì vậy, thư mục chứa được mở.

Hoạt động tốt. Nhưng dấu gạch chéo kép tôi phải xóa bằng tay.

Do đó: Làm thế nào tôi có thể tránh nó?


2
Lưu ý rằng bạn không phải xóa dấu gạch chéo kép. Một dấu gạch chéo kép chỉ đặc biệt khi bắt đầu một đường dẫn và chỉ khi đó chính xác là hai dấu gạch chéo. Nhiều dấu gạch chéo ở giữa hoặc ở cuối hoặc bất kỳ số dấu gạch chéo nào so với chính xác hai dấu ở đầu là chính xác tương đương với một dấu gạch chéo. Điều đó được đảm bảo bởi thông số kỹ thuật POSIX / SUS.
Jörg W Mittag

Câu trả lời:


17

findlà khá đúng theo nghĩa đen. Khi bạn bảo nó tìm kiếm trong "~ / Tải xuống /", nó sử dụng dấu gạch chéo đó (bao gồm dấu gạch chéo) làm tiền tố cho bất cứ thứ gì nó tìm thấy. Vì có một dấu gạch chéo không cần thiết và không liên quan ở cuối con đường bạn đã đưa ra, bạn kết thúc bằng một dấu gạch chéo phụ không cần thiết và không liên quan trong đầu ra.

Giải pháp: xóa dấu "/" khỏi thư mục tìm kiếm:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4

Ý nghĩa của dấu gạch chéo kép này là gì?

Có nghĩa là bạn đang sử dụng BSD cũ tìm thấy.

Làm thế nào tôi có thể tránh nó?

Bạn thực sự có thể bỏ qua dấu gạch chéo trong lệnh ban đầu của mình, nhưng vì nó được thêm tự động thông qua hoàn thành tab (mà bạn chắc chắn nên sử dụng càng nhiều càng tốt), và vì dấu gạch chéo thực sự được sử dụng ở vô số nơi khác để đảm bảo bạn Tôi đang xử lý một thư mục chứ không phải tên tệp, bỏ qua nó là phản trực giác & ngớ ngẩn.

Thay vào đó, tôi khuyên bạn nên làm một trong những điều khác:

a) Tạo một trình bao bọc để tìm các đường ống để sed: | sed của @ // @ / @ '

b) Cài đặt findutils của GNU với 'brew install findutils' và sau đó sử dụng trực tiếp 'gfind', bí danh 'find' thành 'gfind' hoặc thêm / usr / local / opt / findutils / libexec / gnubin vào đường dẫn của bạn GNU findutils '' định vị ',' updateb ', &' xargs ').

c) Chuyển sang hệ điều hành GNU / Linux thích hợp sẽ không gặp phải vấn đề này (& một nghìn người khác) ngay từ đầu. : p


1
Chỉ cần thêm set mark-directories offvào của bạn. inputrcvà bạn tốt để đi. Từ một trong những anh chàng BSD cũ.
fd0

@ fd0 thì người ta sẽ không thể phân biệt giữa các thư mục và tệp có cùng tên; Ở đây, BSD thấy rằng có một chút tồi tệ ở đây, không phải là bash hay readline
Jan Kyu Peblik
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.