Có cách nào để tạo một liên kết cứng trong công cụ tìm?


8

Có cách nào để tạo một liên kết cứng trong công cụ tìm?

Một liên kết cứng trong thiết bị đầu cuối sẽ được tạo ra với:

ln /path/to/file /path/to/newpath

trong khi đó một liên kết / bí danh có thể được thực hiện bằng cách giữ lệnh và tùy chọn hoặc

ln -s /path/to/file /path/to/newpath

(mặc dù rõ ràng hành vi của 'bí danh' và 'ln' là khác nhau )

Câu trả lời:


7

Bạn có thể tạo một dịch vụ Automator như thế này:

nhập mô tả hình ảnh ở đây

Điều này có các tệp đã chọn và tạo các liên kết cứng đến chúng trong thư mục nơi chúng tồn tại. Sau đó, bạn có thể kéo và thả các liên kết đến vị trí mà bạn muốn chúng.

Điều này sẽ làm việc cho các tệp có khoảng trắng trong tên của chúng, nhưng không hoạt động đối với các tệp có dấu ngoặc kép trong tên của chúng.

Bạn có thể truy cập nó từ menu Finder » Services , menu ngữ cảnh và bạn có thể gán cho nó một phím tắt tương tự với Lphím tắt cho bí danh (có lẽ L).


1
Có cách nào để thực hiện một hành động có hiệu lực khi thực hiện thao tác kéo / thả từ thư mục này sang thư mục khác trong khi giữ một cái gì đó như phím tùy chọn cung cấp thư mục đích để liên kết cứng có thể được tạo trực tiếp trong thư mục mới không?
Michael

@Michael có lẽ sẽ làm tốt nhất như một câu hỏi của riêng mình và không bình luận về câu trả lời này.
Daniel

1
Từ một bashquan điểm nên làm việc trên các tập tin với dấu ngoặc kép trong tên. Có một số lý do liên quan đến Automator tại sao nó không? (Bạn có kiểm tra rằng nó thực sự không hoạt động với dấu ngoặc kép?)
Wildcard

Liên quan, từ Sàn giao dịch ngăn xếp Unix & Linux: Làm thế nào để sử dụng các đối số như $ 1 $ 2 trên một vòng lặp for? (Có nhiều cú pháp đơn giản hơn mà bạn có thể sử dụng.)
Wildcard

@Daniel: Tôi đã mở rộng giải pháp của bạn bằng một mã được tinh chỉnh để có được "My File Hardlink.txt" thay vì "My File.txt Hardlink" làm cản trở liên kết loại tệp. Xin vui lòng xem lại nó Cảm ơn.
porg

2

Không có cách nào để làm điều này trong Finder.app. Tuy nhiên, nếu mục tiêu của bạn chỉ là để tránh gõ các lệnh vào Terminal.app thì bạn có thể sử dụng Automator.app để tạo một quy trình công việc để thực hiện các lệnh cho bạn.


2

Tôi thực sự muốn thuật ngữ liên kết trong đổi tên với phần mở rộng được bảo tồn nếu không công cụ tìm sẽ không nhận ra kiểu tệp.

vì vậy tôi đã sử dụng Câu trả lời của Daniel (cảm ơn vì điều đó) và thay đổi nó một chút

for f in "$@"
 do  
  dir=$(dirname "$f")
  filename=$(basename "$f")
  extension=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
  filename="${filename%.*}"
  ln "$f" "${dir}/$filename Hardlink$extension"
done

EDIT: đã thêm những gì tôi nghĩ là mã xử lý tiện ích mở rộng tốt hơn - nên để trống nếu không có tiện ích mở rộng nào. Xin lỗi, tôi không giỏi về mã hóa các kịch bản, vì vậy hãy chia sẻ bất kỳ bản sửa lỗi nào bạn nghĩ rằng điều này cần.


Khá tốt. Chỉ cần cảnh báo: Nếu bạn có một tệp không có bất kỳ tiện ích mở rộng nào, bạn sẽ nhận được một số kết quả thực sự đáng ngạc nhiên! (Và nếu một trong các thư mục chứa có một khoảng thời gian trong tên, sự bất ngờ sẽ xuất hiện dưới một hình thức khác.)
Wildcard

1

Vâng, gián tiếp.

Máy tự động cho phép bạn tạo các dịch vụ chạy bất kỳ tập lệnh shell nào và cũng có thể yêu cầu bạn đường dẫn đến đích cho liên kết cứng (vì nó sẽ không ở cùng vị trí với bản gốc có lẽ). Tôi cho rằng bạn cũng có thể mặc định vị trí liên kết ở đâu đó giống như máy tính để bàn.

Chỉ cần thêm một bước để bật lên một hộp thoại để nhập hoặc nếu không chọn đích và chuyển nó đến lnlệnh của bạn .


1

Giải pháp tốt đẹp được cung cấp bởi Daniel, nhưng tôi khuyên bạn nên thay thế mã tập lệnh của mình bằng mã bên dưới để duy trì loại tệp.

for f in "$@"
do  
  ln "$f" "Plink-$(basename "$f")"
done

"Không phá hủy đối với loại tệp" nghĩa là gì?
dùng151019

Tôi đã đi theo người cha mà lệnh "tạo bí danh" của Finder sử dụng. Tất nhiên, bạn có thể thay đổi quy ước đặt tên theo cách bạn thấy phù hợp.
Daniel
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.