findコマンドで結果の前に./を付けないようにするにはどうすればよいですか?

findコマンドで結果の前に./を付けないようにするにはどうすればよいですか?

私はシェルスクリプトの初心者です。

以下のコマンドを実行すると、次のように出力されます。

$ cd demo
$ ls
dir1 dir2 dir3 dir4 dir5
$
$find . -mtime -2 -type f -regextype posix-egrep -regex ".*/(dir1|dir2|dir3|dir4|dir5)/.+" -exec ls {} \; > /tmp/basefileslist
./dir1/demo1.sh
./dir2/demo2.sh
./dir3/demo3.sh
./dir4/demo4.sh
./dir5/demo5.sh

いいえを受け取るべきですか./?以下のような出力が必要です。

dir1/demo1.sh
dir2/demo2.sh
dir3/demo3.sh
dir4/demo4.sh
dir5/demo5.sh

ベストアンサー1

in findの出力はオプションの前の引数./から来ます。パラメータを.変更すると、.焦点を合わせた出力部分が変わります。あなたの例を考えると、要求された出力が生成されます。

find dir1 dir2 dir3 dir4 dir5 -mtime -2 -type f -exec ls {} \;

正規表現オプションは、サブディレクトリパラメータを指定する操作と重複すると推測されるため、除外しました。出力は次のとおりです

dir1/demo1.sh
dir2/demo2.sh
dir3/demo3.sh
dir4/demo4.sh
dir5/demo5.sh

特定のテストケース(一致する5つのサブディレクトリのみ)では、サブディレクトリのリストを単純なシェルglobに減らすことができます。

find dir[1-5] -mtime -2 -type f -exec ls {} \;

またはより短い球:

find dir? -mtime -2 -type f -exec ls {} \;

多くのユースケースでは、これらの必須ファイルは使用またはfind dir1 dir2 dir3 dir4 dir5検出されません。find dir?しかし、私の答えの目的は、オプションの前のパラメータが検索出力のパスにどのように影響するかを示すことです。

おすすめ記事