find не работает при запуске из удаленного скрипта

find не работает при запуске из удаленного скрипта

У меня в скрипте есть следующая строка:

find ~ Templates -maxdepth 0 -type d -empty

что работает отлично, как и ожидалось. Однако когда я копирую свой скрипт на общий ресурс samba и запускаю его оттуда ( bash myscript.sh), findне находит каталог:

find: ‘Templates’: No such file or directory 

Переменные $PATH одинаковы, в strace я тоже не смог найти причину этого.

Кто-нибудь знает, почему find так себя ведет? Это баг или я не так использую findкоманду, как положено?

использую Ubuntu 19.10 и bash 5.0

решение1

Вы получаете сообщение, find: ‘Templates’: No such file or directoryпотому что подкаталог Templates отсутствует.

  • либо - с момента запуска скрипта
  • или - в каталоге, в который cdпереключился кто-то не упомянутый в вашем скрипте

Мне интересно, опечатка ли это, и вы имели в виду ~/Templates. В любом случае, вы не должны использовать ~в скрипте, а вместо этого использовать "$HOME", поэтому результирующий путь будет "$HOME/Templates".

решение2

"нет, потому что Templates — это каталог, который я ищу в '~' или домашнем каталоге пользователя"

find ~ -maxdepth 0 -type d -empty -name Templates

решение3

Почему вы считаете, что у Samba те же переменные окружения, что и у Linux?

Используйте реальный/полный путь к каталогу, в котором вы хотите выполнить поиск, поскольку ~это не каталог, он, вероятно, пуст — вот почему find обрабатывается Templatesкак путь, а не как шаблон поиска ( find: ‘Templates’: No such file or directory).

Можете ли вы запустить shell в вашем каталоге samba и посмотреть, что там с помощью $ pwd? Вы также можете проверить всю среду с помощью $ set;

Глава «Использование переменных книги Samba»говорит, что домашний каталог %Hне является ~.

небольшой эксперимент:

$ 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

Либо ~он пуст (первый find ...с «пустым» путем), либо его нет Templatesв искомом пути (второй 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

Если

Templates — это каталог, который я ищу в «~» или домашнем каталоге пользователя.

затем

$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates

Должно решить проблему.

-maxdepth 0применяет тесты и действия только к аргументам командной строки (согласночеловек находит; проверьте такжеэтот ответ)

Связанный контент