我在脚本中有以下行:
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 ...
没有(第二个)。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
如果
模板是我在“~”或用户主目录中搜索的目录
然后
$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates
应该解决问题。