リモートスクリプトで実行すると find が機能しません。

リモートスクリプトで実行すると find が機能しません。

スクリプトには次の行があります。

find ~ Templates -maxdepth 0 -type d -empty

期待通りにうまくいきます。ただしbash myscript.sh、スクリプトをSamba共有にコピーしてそこから実行すると、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テンプレートサブディレクトリがないため、このメッセージを受け取りました。

  • どちらか - スクリプトを実行した瞬間から
  • cdまたは - スクリプトに記載されていない部分が切り替えられたディレクトリ

これがすべてタイプミスなのか、どういう意味なのか気になります~/Templates。どちらも~スクリプトで使用しないで使用"$HOME"すると、生成されたパスはになります"$HOME/Templates"

答え2

「いいえ。テンプレートは '~' で検索するディレクトリであるか、ユーザーのホームディレクトリであるためです。」

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

答え3

サンバがLinuxと同じ環境変数を持っていると信じさせる理由は何ですか?

検索したいディレクトリへの物理/フルパスを使用してください。これは~ディレクトリではないため空白になる可能性があります。これが find がこれを検索パターン ( )Templatesではなくパスとして扱う理由です。find: ‘Templates’: No such file or directory

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 ...検索パスにはありません(2番目)。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コマンドラインパラメータにのみテストとタスクを適用します(次のように)。人々が見つけた;また確認してくださいこの回答)

関連情報