find
オプションと一緒にプログラムを使用するとき、人々はディレクトリに変更し、ファイル名に変更するように-execdir
言うのを見ましたが、マニュアルには何をしているのかわかりません。これを説明する公式文書はありますか?また、相対パスまたは絶対パスに拡張されるかどうかを知りたいです。引数を使用して、その内容を別々のファイルに保存するスクリプトを作成しようとしています。私は2つの別々のパラメータに渡され、各パラメータがどのように拡張されたかを確認できると仮定しましたが、結果を見ると、1つのパラメータだけがスクリプトに渡されたように見えるため、まだ実証できません。これが何であるか、どのように拡張されるかを直接確認してください。{}
+
{}
+
これは私が実行しているコマンドです。find '/home/jesse/hacking/sh_sandbox' -type f -execdir /home/jesse/hacking/sh_sandbox/save_params.sh {} +
save_params.shスクリプトは、次のコードを含む実行可能なシェルスクリプトです。
echo $0 >> /home/jesse/hacking/sh_sandbox/zero_param.txt
echo $1 >> /home/jesse/hacking/sh_sandbox/first_param.txt
echo $2 >> /home/jesse/hacking/sh_sandbox/second_param.txt
echo $3 >> /home/jesse/hacking/sh_sandbox/third_param.txt
Zero_paramテキストファイルは、予想される実行中のスクリプトの名前で埋められます。 first_param.txt ファイルは./filename
別のファイル名で埋められます。 Second_param および Third_param テキストファイルは、どちらも他のファイルと同じ行数の空白行で埋められます。これは2番目のパラメータがに渡されないと信じていましたsave_params.sh
。
ベストアンサー1
+
は閉じるタグで、{}
ファイル名に置き換えられ、現在のディレクトリはパスです。
だから
$PWD
=/home/jesse/hacking/sh_sandbox/
$0
=/home/jesse/hacking/sh_sandbox/save_params.sh
$1
=./zero_param.txt
$2
=./first_param.txt
$3
=./second_param.txt
$4
=./third_param.txt
それともそうです...質問をもう一度読むと、findが検索するディレクトリを変更するためにスクリプトが書かれているように見えます。
最初の実行時に1つのファイルしか見つかりません
$PWD
=/home/jesse/hacking/sh_sandbox/
$0
=/home/jesse/hacking/sh_sandbox/save_params.sh
$1
=./save_params.sh
したがって、これを反映した内容でファイルが生成されます。