Рейтинг:3

Как я могу быстро проверить путь в bash, чтобы определить, является ли какой-либо его сегмент символической ссылкой?

флаг us

Если у меня есть такой путь с символической ссылкой:

/это/один/два/три

Есть ли быстрый однострочный способ определить, является ли еще один сегмент пути символической ссылкой? Например, я хотел бы определить, если это, один, два, или же три в приведенном выше примере была символическая ссылка.

Один из способов — сравнить путь, содержащий символическую ссылку, с выводом readlink -f <путь>. Интересно, есть ли более быстрый способ.

Рейтинг:6
флаг cn

Я хотел бы использовать:

если [[ "$my_path" != "$(realpath --canonicalize-existing $my_path)" ]];то
  echo Путь $my_path является относительным путем или содержит символические ссылки.
еще
  echo Путь $my_path является абсолютным.
фи
Рейтинг:0
флаг eg

ты можешь использовать аук и Распечатать для использования в этом случае или других случаях, это очень просто и полезно. в этом случае вы можете сделать следующий шаг: 1 = открыть ~/.bashrc и добавить следующую команду в конец этого файла

псевдоним issymlink="sh /bin/issymlink.sh $1"

2 = создать файл с нижеприведенным содержимым в /bin/issymlink.sh

#!/бин/баш
путь=$1
type=`stat $1 | awk 'FNR == 2 {print $8;}'`

если [ $type != "символический" ]
тогда
  echo Путь $1 является абсолютным и тип этого пути $type
еще
  echo Путь $1 является символической ссылкой.
фи

3 - выйти из системы и войти или ввести Су в терминале и введите наконец, вы можете ввести issymlink ПУТЬ/К/ФАЙЛУ/ИЛИ/КАТАЛОГУ в терминале и введите, чтобы проверить тип файла

пример использования и вывода:

issymlink/библиотека
Путь /lib является абсолютным и типом этого пути является каталог

issymlink /etc/nginx/sites-enabled/по умолчанию
Путь /etc/nginx/sites-enabled/default — символические ссылки.
Рейтинг:-1
флаг in

От: https://unix.stackexchange.com/questions/96907/how-do-i-check-if-a-file-is-a-symbolic-link-to-a-directory

Что мы видим? [[-Л]] - делает эту работу для нас. Ваше здоровье.

# кот script.sh 
#!/бин/баш

/bin/rm -vfr это
/bin/mkdir -vp это/один/два/три

/bin/mv -v это/один/два/три это/один/два/реальные_три
/bin/ln -vfs real_three это/один/два/три
/bin/ls -altr это/один/два/

/bin/mv -v это/один/два это/один/настоящее_два
/bin/ln -vfs real_two это/один/два
/bin/ls -altr это/один/два/
/bin/ls -изменить это/один/

tmp="это/один/два/три"

в то время как [ "$tmp" != "." ]; делать
        если [-L "$tmp" ]; тогда
                /bin/echo "$tmp - символическая ссылка."
        еще
                /bin/echo "$tmp - это не символическая ссылка."
        фи
        tmp=$(/bin/имя_каталога $tmp)
сделано

Применение:

# bash-скрипт.sh 
удалено "это/один/два"
удален каталог 'это/один/настоящее_два/настоящее_три'
удалено «это/один/настоящее_два/три»
удален каталог 'this/one/real_two'
удален каталог 'этот/один'
удален каталог "это"
/bin/mkdir: созданный каталог «этот»
/bin/mkdir: созданный каталог «этот/один»
/bin/mkdir: созданный каталог «этот/один/два»
/bin/mkdir: созданный каталог «этот/один/два/три»
переименовано «это/один/два/три» -> «это/один/два/настоящее_три»
'это/один/два/три' -> 'настоящее_три'
всего 12
drwxr-xr-x 2 root root 4096 8 августа 20:08 real_three
drwxr-xr-x 3 root root 4096 8 августа 20:08 ..
lrwxrwxrwx 1 root root 10 авг 8 20:08 three -> real_three
drwxr-xr-x 3 root root 4096 8 августа 20:08 .
переименовано «это/один/два» -> «это/один/настоящее_два»
'это/один/два' -> 'настоящее_два'
всего 12
drwxr-xr-x 2 root root 4096 8 августа 20:08 real_three
lrwxrwxrwx 1 root root 10 авг 8 20:08 three -> real_three
drwxr-xr-x 3 root root 4096 8 августа 20:08 .
drwxr-xr-x 3 root root 4096 8 августа 20:08 ..
всего 12
drwxr-xr-x 3 root root 4096 8 августа 20:08 ..
drwxr-xr-x 3 root root 4096 8 августа 20:08 real_two
lrwxrwxrwx 1 корень корень 8 авг 8 20:08 два -> real_two
drwxr-xr-x 3 root root 4096 8 августа 20:08 .
this/one/two/three - симлинк.
this/one/two - это симлинк.
this/one - не символическая ссылка.
это - не симлинк.
флаг in
Хотя это неплохой ответ, но тон. Пожалуйста, перепишите свой ответ, чтобы он был более прозаичным.
флаг us
Это плохой ответ. Это даже не то, о чем я спрашивал.
Michael Hampton avatar
флаг cz
@StevieD Вы просили указать способ определить, содержит ли путь компонент, являющийся символической ссылкой. Это делает это и кажется на 100% точным. Это просто слишком многословно в примерах.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.