スクリプトには次の行があります。
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番目)。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
問題を解決する必要があります。
-maxdepth 0
コマンドラインパラメータにのみテストとタスクを適用します(次のように)。人々が見つけた;また確認してくださいこの回答)