印刷するスペースが含まれ、引用符で囲まれた結果を見つけます。

印刷するスペースが含まれ、引用符で囲まれた結果を見つけます。

印刷するスペース(引用符のペア)をfind含む検索結果を含める方法。''この結果にスペースが含まれている場合にのみ、パス文字列にスペースが含まれていない場合はそのままにしてください。

答え1

findあなたのバージョンが-printfをサポートしている場合は、次の方法を使用してこれを実行できます。

find . -name "* *" -printf "\"%p\"\n" -o -print

答え2

GNUツールを使用してCSV出力を生成するとします。

find . -print0 | 
  LC_ALL=C sed -z '/[",[:space:]]/{s/"/""/g; s/.*/"&"/}' |
  tr '\0' '\n'

つまり、ファイル名に1つ以上の"、またはASCIIスペース文字(SPC、TAB、CR、およびCSVのすべての特殊改行文字が含まれますが、これらに限定されません)が含まれている場合は、次のように,変換されます。 escape s )) 文字列を二重引用符で囲みます。""""

この部分は、NULをレコード区切り記号として使用することによって行われる。 NULはファイルパスには存在できない唯一のバイトであるためです。次にNULを改行文字に変換しますtr

GNU以外のシステムでは、いつでも次のものを使用できますperl

find . -print0 | perl -l -0 -pe 'if (/[",\s]/) {s/"/""/g; $_ = "\"$_\""}'

後ろに

touch 'a b' $'a\nb' a,b a_b $'a\200b' 'a"b'

彼らは以下を提供します:

.
"./a""b"
./a_b
"./a,b"
./a�b
"./a
b"
"./a b"

私の端末は、\200有効な文字を形成しないバイトが再生されるUTF-8ロケールにあります。)

除外し../プレフィックスを指定するには(GNU固有のものですが)-print0に置き換えます。これは作る:-mindepth 1 -printf '%P\0'-printf

"a""b"
a_b
"a,b"
a�b
"a
b"
"a b"

-print0また、-mindepthGNU拡張ですが、それ以降、いくつかの他の実装にコピーされました。あなたの実装がまだ実装されていないいくつかの実装の1つである場合は、次のものを置き換えることができます。

  • find . -print0そしてfind . -exec printf '%s\0' {} +
  • find . -mindepth 1 -printf '%P\0'そしてfind . ! -name . -exec sh -c 'for i do printf "%s\0" "${i#./}"; done' sh {} +

答え3

出力を次にパイプするだけですawk

find . | awk '/ /{ printf"\"%s\"\n", $0; next } { print }' 

関連情報