Есть ли такой же флаг, как ln - sh от Ma c osX для linux, чтобы пропустить любой файл, который уже имеет символическую ссылку? - PullRequest
0 голосов
/ 19 марта 2020

Например, с man-страниц Ma c:

 man ln 


     -h     If the NewLinkFile (or directory) is a symbolic link, do not follow
            it.  This is most useful with the -f option, to replace a symlink
            which can point to a directory.

Я пишу сценарий, который раз в день перебирает сотни файлов и объединяет их все, а затем периодически в течение дня проверяет новые файлы и символические ссылки их. Было бы здорово использовать эту -h проверку или что-то подобное, так как на данный момент это делается очень неловко.

1 Ответ

0 голосов
/ 19 марта 2020

GNU-эквивалент BSD ln -sh равен ln -sn.

Но GNU ln -sT безопаснее, поскольку он пропускает как символические c ссылки, так и каталоги.

Сравните:

cd "$(mktemp -d)"
mkdir bin
for d in bin usr etc; do ln -sn "/$d" "$d"; done
   # will create a bin/bin -> /bin symlink

против

cd "$(mktemp -d)"
mkdir bin
for d in bin usr etc; do ln -sT "/$d" "$d"; done

ln: failed to create symbolic link 'bin': File exists
...