-printfフラグを使用してfind出力に色を付けることはできますか?

-printfフラグを使用してfind出力に色を付けることはできますか?

注文する

find . -type l -not -xtype l -printf "%p -> %l\n"

ディレクトリ内のすべての壊れていないシンボリックリンクを印刷します.。この出力の色を指定して、その部分が青色に変わるようにしたいと思います%p。頑張った

find . -type l -not -xtype l -printf '\e[1;34m%-6s\e[m' "%p -> %l\n"

ただし、これによりエラーが発生しますfind: warning: unrecognized escape \e。この問題を解決する方法についてのアイデアはありますか?

答え1

これは正確ではありません。カラーコードの順序と同じパラメータ%pにする必要があります。-printfいいえ別途。

-printfフラグはfindの一般的な組み込みフラグとは異なりますbash。このfindバージョンはフォームパラメータを使用します-printf formatが、組み込みバージョンはフォーマットprintf <FORMAT> <ARGUMENTS...>指定子を使用せず、引数の後に続くフォーマット指定子を許可せず、オプションを定義する単一の文字列のみを受け入れます。オプションは、ファイル属性を記述するさまざまなシーケンスを-printf提供します。find内部的に%s渡される意味は、組み込みfind -printf形式の仕様定義とは異なります。

printfまた、(GNU findutils)コマンドのコマンドは、ANSIカラーコードのみをサポートし、エスケープシーケンスを許可しないようですfind(GNUシェルのスタンドアロンGNUユーティリティに組み込まれているものとは異なり\e)。 8進数対応する項目のみを許可します(ここでは033 ASCIIベースのシステムを想定しています):printfprintf

find . -type l -not -xtype l -printf '\033[1;34m%p\033[m -> %l\n'

目的のANSIカラーコードを追加できます。

$'...'あるいは、以下を認識するGNUシェルを含む一部のシェルにある引用演算子を使用することもできます\e

find . -type l -not -xtype l -printf $'\e[1;34m%p\e[m -> %l\n'

上記と\e\nに渡される前にESCおよびNL文字に展開されますfind

関連情報