注文する
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ベースのシステムを想定しています):printf
printf
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
。