Apakah ada cara untuk membuat tautan keras di finder?

8

Apakah ada cara untuk membuat tautan keras di finder?

Tautan keras di terminal akan dibuat dengan:

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

sedangkan symlink / alias dapat dilakukan dengan memegang perintah dan opsi atau

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

(meskipun tampaknya perilaku 'alias' dan 'ln' berbeda )

keflavich
sumber

Jawaban:

7

Anda dapat membuat layanan Automator seperti ini:

masukkan deskripsi gambar di sini

Ini mengambil file yang dipilih dan membuat tautan keras ke mereka di direktori di mana mereka ada. Anda kemudian dapat menarik dan melepaskan tautan ke lokasi yang Anda inginkan.

Ini akan berfungsi untuk file dengan spasi di namanya, tetapi tidak untuk file yang mengandung tanda kutip di namanya.

Anda dapat mengaksesnya dari menu Finder » Services , menu konteks, dan Anda dapat menetapkan pintasan keyboard yang dianalogikan dengan Lpintasan untuk alias (mungkin L).

Daniel
sumber
1
Apakah ada cara untuk membuat tindakan yang mulai berlaku ketika melakukan drag / drop dari satu folder ke folder lainnya sambil menahan sesuatu seperti tombol opsi yang menyediakan folder tujuan sehingga hard link dapat dibuat langsung di direktori baru?
Michael
@Michael yang mungkin akan melakukan yang terbaik sebagai pertanyaannya sendiri dan bukan komentar pada jawaban ini.
Daniel
1
Dari bashperspektif yang seharusnya bekerja pada file dengan tanda kutip dalam nama. Apakah ada alasan Automator terkait mengapa tidak? (Apakah Anda menguji bahwa itu sebenarnya tidak berfungsi dengan tanda kutip?)
Wildcard
Terkait, dari Unix & Linux Stack Exchange: Bagaimana cara menggunakan argumen seperti $ 1 $ 2 ... dalam for for loop? (Ada beberapa sintaks sederhana yang dapat Anda gunakan.)
Wildcard
@Daniel: Saya memperluas solusi Anda dengan kode yang disempurnakan untuk mendapatkan "My File Hardlink.txt" alih-alih "My File.txt Hardlink" yang menghambat asosiasi jenis file. Silakan tinjau rekannya, Terima kasih.
porg
2

Tidak ada cara untuk melakukan ini di Finder.app sendiri. Namun, jika tujuan Anda hanya untuk menghindari mengetik perintah ke Terminal.app maka Anda bisa menggunakan Automator.app untuk membuat alur kerja untuk melakukan perintah untuk Anda.

Conorgriffin
sumber
2

Saya sebenarnya menginginkan istilah tautan dalam rename dengan ekstensi yang dipertahankan jika tidak, finder tidak akan mengenali tipe file.

jadi saya menggunakan Jawaban Daniel (terima kasih untuk itu) dan mengubahnya sedikit

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: menambahkan apa yang saya pikir lebih baik kode penanganan ekstensi - harus kosong jika tidak ada ekstensi. Maaf, saya tidak pandai pengkodean skrip, jadi silakan bagikan perbaikan yang menurut Anda perlu.

Prasanth
sumber
Cukup bagus. Hanya peringatan: Jika Anda memiliki file yang tidak memiliki ekstensi, Anda akan mendapatkan beberapa hasil yang sangat mengejutkan! (Dan jika salah satu direktori yang berisi memiliki periode dalam nama, kejutan akan bermanifestasi dalam bentuk yang berbeda.)
Wildcard
1

Ya, secara tidak langsung.

Automator memungkinkan Anda membuat layanan yang menjalankan skrip shell apa pun dan juga dapat meminta Anda jalur ke tujuan tautan keras (karena mungkin tidak berada di lokasi yang sama dengan yang asli mungkin). Saya kira Anda dapat menetapkan lokasi tautan secara default di suatu tempat seperti desktop juga.

Cukup tambahkan langkah untuk memunculkan dialog untuk masuk atau memilih tujuan dan meneruskannya ke lnperintah Anda .

bmike
sumber
1

Solusi yang bagus disediakan oleh Daniel, tapi saya sarankan mengganti kode skripnya dengan yang di bawah ini yang mempertahankan tipe file.

for f in "$@"
do  
  ln "$f" "Plink-$(basename "$f")"
done
Louis Lietaer
sumber
Apa artinya "tidak merusak untuk tipe file"?
user151019
Saya mengikuti pola yang digunakan perintah Finder "make alias". Anda dapat, tentu saja, mengubah konvensi penamaan sesuai keinginan Anda.
Daniel