Eu tenho a seguinte linha em um script:
find ~ Templates -maxdepth 0 -type d -empty
que funciona bem, como esperado. No entanto, quando copio meu script para o samba share e o executo a partir daí ( bash myscript.sh
), find
não encontro o diretório:
find: ‘Templates’: No such file or directory
As variáveis $PATH são as mesmas, mas também não consegui encontrar uma razão para isso.
Alguém sabe por que find se comporta dessa maneira? É um bug ou não estou usando find
o comando como deveria?
usando Ubuntu 19.10 e bash 5.0
Responder1
Você está recebendo a mensagem find: ‘Templates’: No such file or directory
porque não há subdiretório Templates
- qualquer um - a partir do momento em que você está executando o script
- ou - no diretório para o qual algum não mencionado
cd
em seu script mudou
Estou me perguntando se tudo isso é um erro de digitação e você quis dizer ~/Templates
. De qualquer forma, você não deve usar ~
em um script, mas sim usar "$HOME"
, então o caminho resultante seria "$HOME/Templates"
.
Responder2
"não, porque Templates é o diretório que estou procurando em um '~' ou no diretório inicial do usuário"
find ~ -maxdepth 0 -type d -empty -name Templates
Responder3
O que te faz acreditar que o samba tem as mesmas variáveis ambientais do linux?
Use o caminho real/completo para o diretório que você deseja pesquisar, pois ~
não é um diretório, provavelmente está vazio - é por isso que find trata Templates
como caminho e não como padrão de pesquisa ( find: ‘Templates’: No such file or directory
).
Você pode iniciar o shell no seu diretório samba e ver o que está acontecendo $ pwd
? Você também pode verificar todo o ambiente com $ set
;
Capítulo Usando variáveis do livro Sambadiz que o diretório inicial %H
não é ~
.
pequeno experimento:
$ ls -l | grep -E '^d' # to show there is 1 directory (tmp), which is not empty but doesnt have `Templates`
drwxr-xr-x 2 user group 24576 Mar 16 16:16 tmp
$ find Templates -maxdepth 0 -type d -empty # as if <path> (`~`) was empty
find: Templates: No such file or directory
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
find: Templates: No such file or directory
Ou ~
está vazio (primeiro find ...
com caminho "vazio") ou você não tem Templates
o caminho pesquisado (segundo find
).
$ touch Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
$ rm Templates; mkdir Templates
$ find tmp Templates -maxdepth 0 -type d -empty # as if `~` was `tmp`
Templates
Se
Modelos é o diretório que estou procurando em um '~' ou no diretório inicial do usuário
então
$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates
Deve resolver o problema.
-maxdepth 0
aplica apenas os testes e ações aos argumentos da linha de comando (de acordo comhomem encontrar; verifique tambémesta resposta)