从远程脚本运行时 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

“不,因为模板是我在‘~’或用户主目录中搜索的目录”

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

答案3

是什么让你相信 samba 具有与 linux 相同的环境变量?

使用您想要搜索的目录的真实/完整路径,因为它~不是目录,它可能是空的 - 这就是为什么 find 视为Templates路径而不是搜索模式 ( find: ‘Templates’: No such file or directory)。

你能在你的 samba 目录中启动 shell 看看它有什么吗$ 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 ...没有(第二个)。Templatesfind

$ 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

如果

模板是我在“~”或用户主目录中搜索的目录

然后

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

应该解决问题。

-maxdepth 0仅将测试和操作应用于命令行参数(根据人发现;还检查这个答案

相关内容