以下の方法でフォルダー内のアイテムのリストを出力したいと思います。
"filename1" "filename2" "file name with spaces" "foldername" "folder name with spaces"
つまり、アイテム名は1行で、引用符(シングルまたはダブル)で囲み、スペースで区切る必要があります。
そんなこと知ってる
find . | xargs echo
出力を1行で出力しますが、各項目名を引用符で囲む方法がわかりません。
このコードはbshスクリプトの一部です。したがって、ソリューションは一連のコマンドであり、中間出力を格納するために一時ファイルを使用できます。
何か提案をありがとうございました。
乾杯、アナ
これはうまくいくはずです
find $PWD | sed 's/^/"/g' | sed 's/$/"/g' | tr '\n' ' '
編集:
これは前のものより効率的です。
find $PWD | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '
@Timofeyのソリューションは、最終的にtrで動作し、最も効率的です。
find $PWD -exec echo -n '"{}" ' \; | tr '\n' ' '
次のように、find "-printf"を使用してsimlpyを実行することもできます。
find . -printf "\"%p\" " | xargs your_command
どこ:
%p File's name.
これにより、見つかったすべてのファイルが引用符で囲まれ、各アイテムがスペースで区切られます。これにより、複数のコマンドの使用が回避されます。
これを試して。
find . -exec echo -n '"{}" ' \;
GNU ls
オプション--quoting-style
を使用すると、目的を簡単に取得できます。マニュアルページから:
--quoting-style=Word
エントリ名には引用スタイル
Word
を使用します:literal
、locale
、Shell
、Shell-always
、Shell-escape
、Shell-escape-always
、c
、escape
たとえば、コマンドls --quoting-style=Shell-escape-always
を使用すると、出力は次のようになります。
'filename1' 'filename2' 'file name with spaces' 'foldername' 'folder name with spaces'
--quoting-style=c
を使用すると、目的の例を正確に再現できます。ただし、出力がシェルスクリプトで使用される場合は、Shell-escape-always
などの特殊文字を正しくエスケープする形式の1つを使用する必要があります。
編集:
次の回答では、1行ではなく、改行区切りのLISTが生成されます。
| tr '\n' ' '
)あまり言及されていない方法は、xargs
の-d
(--delimiter
)オプションを使用することです。
find . | xargs -I@ -d"\n" echo \"@\"
-I@
は各find
の結果を@
としてキャプチャし、引用符でエコーしました
これにより、引数に引用符を追加したのと同じように、任意のコマンドを呼び出すことができます。
$ find . | xargs -d"\n" testcli.js
[ "filename1",
"filename2",
"file name with spaces",
"foldername",
"folder name with spaces" ]
for f in *; do printf "'%s' " "$f"; done; echo
または、 Gordon Davisson のおかげで:
printf "'%s' " *; echo
末尾のecho
は、出力に改行を追加するだけです。
find . | sed "s|.*|\"&\"|"
簡単な説明:
。*パターンの結果を取り、引用符で囲みます。
良い情報源は sed です。
詳細説明:
パターン:s/one/ONE /
試す
ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '