從遠端腳本運行時 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僅將測試和操作應用於命令列參數(根據人發現;還檢查這個答案

相關內容