Intereting Posts
XScreenSaver: 1-2-секундная задержка, в течение которой мой ноутбук не заблокирован ssh-keyscan не имеет выхода Гарантирует ли `users` всех пользователей на хосте? Я единственный, кто имеет доступ к моей машине. Любые причины для включения прав группы / других файлов и каталогов? Почему Kali Linux выставляет httpd на порт 3000? dovecot mysql-connection ошибка из-за специального charater в config Как преобразовать поля фиксированной длины в файл в пространство с разделителями Может ли оболочка Bash «Игнорировать» лишний текст вставки-вставки? Удалять файлы старше X дней – mtime, ctime и atime не работают псевдоним, чтобы отключить экран при выходе (и убить ssh) установка netcdf и usr / local … папки NGINX Reverse Proxy – не был введен пользователь / пароль для базовой аутентификации Обнаруживать, отключен ли монитор HDMI Как tar-bzip старые файлы в ежегодных группах Потяните метаданные из видео в терминале

проверьте, есть ли ссылка из текущего файла

Как проверить, есть ли ссылка из текущего файла в Linux? Скажем, у меня есть:

touch foo ln -s foo bar ll foo bar bar -> foo foo 

Теперь, я хочу знать, если есть файл, связанный с foo : eg

 $magic-command foo foo<-bar 

С помощью GNU find вы можете:

 find -L / -xtype l -prune -samefile foo -exec ls -ld {} + 

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

При использовании -L соблюдаются символические ссылки. Мы хотим, чтобы find файлы, связанные с foo , но мы не хотим следовать символической ссылке при смене дерева каталогов. Следовательно, -prune которая перестает -prune в символические -prune .

С помощью zsh вы можете:

 ls -ld /**/*(@De:'[[ $REPLY -ef foo ]]':) 

Если вас интересуют только символические ссылки.


1 Поиск только файлов, которые являются символическими ссылками на foo , будет более сложным. -samefile / -ef сравнивает номера устройств и номеров inode, возвращаемые системным вызовом stat() , то есть после того, как все символические ссылки были разрешены (системой). То, что вам нужно, это проверить ссылки, чей каталог цели такой же, как у foo и базового имени foo .

С zsh это будет:

 zmodload zsh/zstat links_to_thefile() { local file link file=${1-$REPLY} zstat -L -A link +link -- $file || return [[ $link:t = $thefile:t ]] || return case $link in (/*) file=$link;; (*) file=$file:h/$link esac [[ $file:h -ef $thefile:h ]] } thefile=foo ls -ld /**/*(@D+links_to_thefile) 

Или с помощью инструментов GNU ( find и shell ( bash )):

 find / -type l \( -lname foo -o -lname '*/foo' \) -printf '%p\0%l\0' | while IFS= read -rd '' file && IFS= read -rd '' link; do [[ $link = /* ]] || link=${file%/*}/$link [[ ${link%/*} -ef . ]] && printf '%s\n' "$file" done 

stat не подсчитывает количество ссылок на символьные ссылки, хотя это помогает, если это помогает.

Невозможно решить, что вы просите.