41

次の方法でフォルダー内のアイテムのリストを出力したいと思います。

"filename1"  "filename2" "file name with spaces" "foldername" "folder name with spaces"

つまり、項目名は 1 行で、引用符 (一重または二重) で囲み、スペースで区切る必要があります。

そんなこと知ってる

find . | xargs echo

出力を 1 行に出力しますが、各項目名を引用符で囲む方法がわかりません。

このコードは bsh スクリプトの一部です。したがって、解決策は一連のコマンドであり、中間出力を格納するために一時ファイルを使用できます。

ご提案いただきありがとうございます。

乾杯、アナ

4

10 に答える 10

53

次のように、単純に find "-printf" を使用することもできます。

find . -printf "\"%p\" " | xargs your_command

どこ:

%p = file-path

これにより、見つかったすべてのファイルパスが引用符で囲まれ、各項目がスペースで区切られます。これにより、複数のコマンドの使用が回避されます。

于 2013-02-28T14:15:26.907 に答える
31

これはうまくいくはずです

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' ' '
于 2011-05-18T08:14:44.597 に答える
20

GNUlsオプション--quoting-styleを使用して、必要なものを簡単に取得できます。マニュアルページから:

--quoting-style=WORD

WORD エントリ名には引用スタイルを使用し ます: literal, locale, shell, shell-always, shell-escape, shell-escape-always,cescape

たとえば、コマンドを使用するls --quoting-style=shell-escape-alwaysと、出力は次のようになります。

'filename1' 'filename2' 'file name with spaces' 'foldername' 'folder name with spaces'

を使用--quoting-style=cすると、目的の例を正確に再現できます。ただし、シェル スクリプトで出力を使用する場合は、. などの特殊文字を正しくエスケープする形式のいずれかを使用する必要がありますshell-escape-always

于 2016-02-17T08:47:13.400 に答える
17

これを試して。

find . -exec echo -n '"{}" ' \;
于 2011-05-18T08:14:06.837 に答える
4
for f in *; do printf "'%s' " "$f"; done; echo

または、 Gordon Davissonに感謝します。

printf "'%s' " *; echo

末尾echoは、出力に改行を追加するだけです。

于 2011-05-18T10:40:01.893 に答える
1

試す

ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '
于 2018-11-29T20:23:30.667 に答える