我在腳本中有以下行:
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
應該解決問題。