Lista links simbólicos em diretórios relativos específicos

1

Eu tenho um servidor que compartilha as pastas base do usuário pela rede. Cada usuário tem uma pasta de cache. Às vezes, um link simbólico é usado para redirecionar essa pasta para o disco rígido de qualquer máquina que estiver usando (e às vezes isso não funciona e eles têm um link simbólico quebrado [que é um assunto para outro dia].)

Estou tentando descobrir quais usuários têm links simbólicos e quais não. Dentro da pasta compartilhada, para chegar à pasta Cache, você substituiria pastas assim:

$GRADE/$USERNAME/Library/Caches

Agora, estou pesquisando para ver quais usuários têm links simbólicos e quais não têm. Eu inventei:

cd /path/to/shared/home/folders
sudo find . -name "Caches" -exec ls -ld {} \;

e obtenha resultados como este:

lrwxr-xr-x@  1 name0  ES_Students   27 Jan 18 11:05 ./CES_Grade_03/name0/Library/Caches -> /tmp/name0/Library/Caches
drwx------  11 name1  ES_Students  374 Dec  8 15:44 ./CES_Grade_03/name1/Library/Caches
lrwxr-xr-x@  1 name2  ES_Students   27 Feb 23 14:27 ./CES_Grade_03/name2/Library/Caches -> /tmp/name2/Library/Caches
drwx------  17 name3  ES_Students  578 Jan 25 11:13 ./CES_Grade_03/name3/Library/Caches
drwx------  12 name4  ES_Students  408 Mar 22 13:09 ./CES_Grade_03/name4/Library/Caches

mas me incomoda que deve haver um caminho melhor. Sim, é bom o suficiente e uma tarefa única, mas eu quero saber como fazer isso direito! Certamente, eu deveria ser capaz de fazer algo como:

cd /path/to/shared/home/folders
sudo ls -ld **/**/Library/Caches

Eu tenho medo de não saber a sintaxe correta ou de haver um formato curinga substituto de pasta recursivo no bash e meu google-fu falhou em mim.

Então, como formular a pesquisa adequadamente?

    
por Clinton Blackmore 22.03.2010 / 23:11

2 respostas

1

O Bash 4 tem ** se você shopt -s globstar

globstar
                      If set, the pattern ** used in a filename expansion con‐
                      text will match a files and zero or more directories and
                      subdirectories.  If the pattern is followed by a /, only
                      directories and subdirectories match.

Para localizar arquivos que são links simbólicos para arquivos (em vez de diretórios):

find -maxdepth 1 -xtype f -type l -ls

Para encontrar links simbólicos quebrados:

find -L -type l
    
por 22.03.2010 / 23:57
0

Dennis certamente me colocou no caminho certo. Aqui está o que eu estou finalmente usando:

sudo find . -depth 3 -name Library -exec ls -ldGF {}/Caches \;

Ele pesquisa apenas uma profundidade de 3 diretórios, procurando a pasta Library (que todo usuário possui). Então, ele listará a entrada do Caches nessa pasta, me dando:

  • uma listagem para uma pasta, se existir (em azul)
  • uma linha mostrando o symlink, se existir (em roxo)
  • (teoricamente) um erro se não existir nenhuma pasta de cache

Eu tentei:

sudo find . -depth 4 -name Caches -ls

e é muito parecido com o que eu queria. Ele não tem nenhuma coloração e não me dirá se uma pasta Cache está faltando.

Eu também gostei muito da pesquisa por links simbólicos quebrados, como segue:

sudo find -L . -depth 4 -type l -ls

Suponho que a moral da história é que eu deveria ter passado mais algum tempo pesquisando a página find man.

    
por 29.03.2010 / 18:26

Tags