Tengo la siguiente línea en un script:
find ~ Templates -maxdepth 0 -type d -empty
que funciona bien, como se esperaba. Sin embargo, cuando copio mi script en Samba Share y lo ejecuto desde allí ( bash myscript.sh
), find
no encuentro el directorio:
find: ‘Templates’: No such file or directory
Las variables $PATH son las mismas, por ahora tampoco pude encontrar el motivo de esto.
¿Alguien sabe por qué find se comporta de esta manera? ¿Es un error o no estoy usando find
el comando como se supone que debo hacerlo?
usando Ubuntu 19.10 y bash 5.0
Respuesta1
Recibes el mensaje find: ‘Templates’: No such file or directory
porque no hay ningún subdirectorio de Plantillas
- ya sea - desde el punto en que está ejecutando el script
cd
o - en el directorio al que ha cambiado algo no mencionado en su script
Me pregunto si todo esto es un error tipográfico y quisiste decir ~/Templates
. De cualquier manera, no debes usarlo ~
en un script, sino usar "$HOME"
, por lo que la ruta resultante sería "$HOME/Templates"
.
Respuesta2
"no, porque Plantillas es el directorio que estoy buscando en '~' o en el directorio de inicio del usuario"
find ~ -maxdepth 0 -type d -empty -name Templates
Respuesta3
¿Qué te hace creer que samba tiene las mismas variables ambientales que linux?
Utilice la ruta real/completa al directorio que desea buscar, ya que ~
no es un directorio, probablemente esté vacío; es por eso que buscar se trata Templates
como una ruta, no como un patrón de búsqueda ( find: ‘Templates’: No such file or directory
).
¿Puedes iniciar Shell en tu directorio de samba y ver con qué se trata $ pwd
? También puedes comprobar todo el entorno con $ set
;
Capítulo sobre el uso de variables del libro Sambadice que el directorio de inicio %H
no lo es ~
.
pequeño 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
O ~
está vacío (primero find ...
con la ruta "vacía") o no tiene Templates
la ruta buscada (segunda 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
Si
Plantillas es el directorio que estoy buscando en '~' o en el directorio de inicio del usuario
entonces
$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates
Debería resolver el problema.
-maxdepth 0
sólo aplica las pruebas y acciones a los argumentos de la línea de comando (de acuerdo conhombre encontrar; comprobar tambiénesta respuesta)