Buat symlink - timpa jika ada

54

Saya ingin mencatat data /path/to/data/folder/month/date/hour/minute/filedan menghubungkannya dengan /path/to/recent/filedan melakukan ini secara otomatis setiap kali file dibuat.

Dengan asumsi saya tidak akan tahu sebelumnya jika /path/to/recent/fileada, bagaimana saya bisa membuatnya (jika tidak ada) atau menggantinya (jika memang ada)? Saya yakin saya bisa memeriksa apakah ada dan kemudian melakukan delete, symlink, tapi saya bertanya-tanya apakah ada perintah sederhana yang akan melakukan apa yang saya inginkan dalam satu langkah.

drjrm3
sumber
Jika tujuan ada, tetapi bukan symlink, apa yang Anda inginkan / harapkan terjadi?
Toby Speight

Jawaban:

34

Silakan baca manualnya .

ln -sfn /new/target /path/to/symlink

$ man ln

-n, --no-dereference
memperlakukan LINK_NAME sebagai file normal jika itu adalah tautan simbolis ke direktori

LithiumSix
sumber
1
Mengapa ini jawaban yang benar?
Mrchief
1
@Mrchief Jika /path/to/symlinksudah merupakan symlink ke direktori, tanpa -nflag, Anda akan mendapatkan symlink yang dibuat /path/to/symlink/targetalih-alih menggantikan/path/to/symlink
Flimm
Perhatikan bahwa dalam macOS, ini masih tidak berfungsi dalam beberapa kasus, misalnya, ketika /path/to/symlinkada dan merupakan direktori, dan tetapi bukan symlink. Saya pikir satu-satunya cara untuk mengatasinya adalah dengan berlari rm -rfdulu.
Flimm
78

Ini adalah tujuan dari ln's -fpilihan: menghilangkan file tujuan sudah ada, jika ada, sebelum membuat link.

ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

akan membuat symlink /path/to/recent/filemenunjuk ke /path/to/data/folder/month/date/hour/minute/file, mengganti file yang ada atau symlink ke file jika perlu (dan berfungsi dengan baik jika tidak ada yang sudah ada di sana).

Jika direktori, atau symlink ke direktori, sudah ada dengan nama target, symlink akan dibuat di dalamnya (jadi Anda akan berakhir dengan /path/to/recent/file/filedalam contoh di atas). The -npilihan, tersedia dalam beberapa versi ln, akan mengurus symlink ke direktori untuk Anda, menggantikan mereka sebagai diperlukan:

ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file

POSIXln tidak menentukan -nsehingga Anda tidak dapat mengandalkannya secara umum. Sebagian besar lnperilaku didefinisikan oleh implementasi sehingga Anda benar-benar perlu memeriksa spesifikasi sistem yang Anda gunakan. Jika Anda menggunakan GNUln , Anda dapat menggunakan opsi -tdan -Tjuga, untuk membuat perilakunya sepenuhnya dapat diprediksi di hadapan direktori ( yaitu gagal daripada membuat tautan di dalam direktori yang ada dengan nama yang sama).

Stephen Kitt
sumber