find não funciona quando executado a partir de script remoto

find não funciona quando executado a partir de script remoto

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), findnã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 findo comando como deveria?

usando Ubuntu 19.10 e bash 5.0

Responder1

Você está recebendo a mensagem find: ‘Templates’: No such file or directoryporque 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 cdem 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 Templatescomo 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 %Hnã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 Templateso 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 0aplica apenas os testes e ações aos argumentos da linha de comando (de acordo comhomem encontrar; verifique tambémesta resposta)

informação relacionada