Створити симпосилання - перезаписати, якщо така існує


54

Я хочу зняти дані /path/to/data/folder/month/date/hour/minute/fileі символізувати їх, /path/to/recent/fileі робити це автоматично щоразу, коли файл створюється.

Якщо припустити, що я не буду знати достроково, чи /path/to/recent/fileіснує, як я можу створити його (якщо він не існує) або замінити його (якщо він існує)? Я впевнений, що я можу просто перевірити, чи існує, а потім зробити видалення, посилання, але мені цікаво, чи існує проста команда, яка виконає те, що я хочу, за один крок.


Якщо призначення існує, але не є символьним посиланням, що ви хочете / очікуєте, що це станеться?
Toby Speight

Відповіді:


34

Будь ласка, прочитайте посібник .

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

$ людина ln

-n, --no-dereference
трактують LINK_NAME як звичайний файл, якщо він є символічним посиланням на каталог


1
Чому це правильна відповідь?
Mrchief

1
@Mrchief Якщо /path/to/symlinkвже є посилання на каталог, без -nпрапора, ви отримаєте створене символьне посилання /path/to/symlink/targetзамість заміни/path/to/symlink
Flimm

Зауважте, що в macOS це все ще не працює в деяких випадках, наприклад, коли /path/to/symlinkіснує і є каталогом, але не є символьним посиланням. Я думаю, що єдиний спосіб обійти це - rm -rfпершим бігти .
Flimm

78

Це мета lnросійського -fваріанту: він видаляє існуючі файли призначення, якщо такі є, перед створенням посилання.

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

створить символьне посилання, що /path/to/recent/fileвказує на /path/to/data/folder/month/date/hour/minute/file, замінивши будь-який існуючий файл або символьне посилання на файл, якщо це необхідно (і працює нормально, якщо там вже нічого немає).

Якщо каталог або символьне посилання на каталог вже існує з цільовим іменем, символьне посилання буде створено всередині нього (так що ви закінчите /path/to/recent/file/fileв наведеному вище прикладі). -nОпція, доступна в деяких версіях ln, дбатиме про симлінк довідників для вас, замінюючи їх по мірі необхідності:

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

POSIXln не вказує, -nтому на нього не можна покладатися взагалі. Значна частина lnповедінки визначається реалізацією, тому вам потрібно перевірити специфіку системи, яку ви використовуєте. Якщо ви використовуєте GNUln , ви можете також використовувати -tі -Tпараметри та параметри, щоб зробити його поведінку повністю передбачуваною у присутності каталогів ( тобто не вдасться замість створення посилання всередині наявного каталогу з тим самим іменем).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.