verificar se existe um link do arquivo atual

2

Como posso verificar se existe um link do arquivo atual no Linux? Diga, eu tenho:

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

Agora, quero saber se há algum arquivo vinculado de foo : por exemplo,

$magic-command foo
foo<-bar
    
por BaRud 14.06.2016 / 16:20

2 respostas

3

Com o% GNUfind, você pode fazer:

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

Isso localizará todos os arquivos do tipo symlinks que eventualmente serão resolvidos no mesmo arquivo que foo . Isso também incluirá links simbólicos para links simbólicos ou hardlinks para foo 1 .

Com -L , os links simbólicos são seguidos. Queremos que find arquivos sejam vinculados a foo , mas não queremos seguir o symlink ao descer a árvore de diretórios. Daí o -prune que pára de descer em links simbólicos.

Com zsh , você pode fazer:

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

Se você está interessado apenas em links simbólicos.

1 Encontrar somente arquivos que são links simbólicos para foo seria mais complicado. O -samefile / -ef compara os números de dispositivo e inode retornados pela chamada de sistema stat() , ou seja, depois que todos os links simbólicos foram solucionados (pelo sistema). O que você deseja é verificar se há links cujo diretório de destino seja igual ao de foo e o nome base seja foo .

Com zsh , isso seria:

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)

Ou com ferramentas GNU ( find e shell ( bash )):

find / -type l  \( -lname foo -o -lname '*/foo' \) -printf '%p
find -L /  -xtype l -prune -samefile foo -exec ls -ld {} +
%l
ls -ld /**/*(@De:'[[ $REPLY -ef foo ]]':)
' | while IFS= read -rd '' file && IFS= read -rd '' link; do [[ $link = /* ]] || link=${file%/*}/$link [[ ${link%/*} -ef . ]] && printf '%s\n' "$file" done
    
por 14.06.2016 / 16:34
0

stat não conta as contagens de links simbólicos, porém, se isso ajudar.

Não há como resolver o que você está perguntando.

    
por 14.06.2016 / 16:43

Tags