Chcę usunąć dane /path/to/data/folder/month/date/hour/minute/file
i /path/to/recent/file
utworzyć dowiązanie symboliczne i zrobić to automatycznie przy każdym utworzeniu pliku.
Zakładając, że nie będę wiedział z góry, czy /path/to/recent/file
istnieje, jak mogę go utworzyć (jeśli nie istnieje) lub zastąpić (jeśli istnieje)? Jestem pewien, że mogę po prostu sprawdzić, czy istnieje, a następnie wykonać usuwanie, dowiązanie symboliczne, ale zastanawiam się, czy istnieje proste polecenie, które zrobi to, co chcę w jednym kroku.
Odpowiedzi:
Proszę przeczytać instrukcję .
źródło
/path/to/symlink
jest już dowiązaniem symbolicznym do katalogu, bez-n
flagi, otrzymasz/path/to/symlink/target
zamiast niego dowiązanie symboliczne/path/to/symlink
/path/to/symlink
istnieje i jest katalogiem, ale nie dowiązaniem symbolicznym. Myślę, że jedynym sposobem obejścia tego jest uruchomienie wrm -rf
pierwszej kolejności.To jest cel
ln
„s-f
opcji: usuwa istniejące pliki docelowe, jeśli w ogóle, przed utworzeniem łącza.utworzy dowiązanie symboliczne
/path/to/recent/file
wskazujące/path/to/data/folder/month/date/hour/minute/file
, zastępując dowolny istniejący plik lub dowiązanie symboliczne do pliku, jeśli to konieczne (i działa dobrze, jeśli już tam nic nie ma)Jeśli katalog lub dowiązanie symboliczne do katalogu już istnieje z nazwą docelową, dowiązanie symboliczne zostanie utworzone w nim (tak byś znalazł się
/path/to/recent/file/file
w powyższym przykładzie).-n
Opcja dostępna w niektórych wersjachln
, zajmie dowiązania do katalogów dla ciebie, zastępując je w miarę potrzeby:POSIX
ln
nie określa,-n
więc ogólnie nie można na nim polegać. Wieleln
zachowań jest zdefiniowanych w implementacji, więc naprawdę musisz sprawdzić specyfikę używanego systemu. Jeśli używasz GNUln
, możesz również użyć opcji-t
i-T
, aby jego zachowanie było w pełni przewidywalne w obecności katalogów ( tzn. Nie powiodło się zamiast tworzenia łącza w istniejącym katalogu o tej samej nazwie).źródło