如何在SINGLE行中输出用引号括起来的文件名?

问题描述 投票:23回答:8

我想以下列方式输出文件夹中的项目列表:

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

换句话说,项目名称必须在一行中,用引号(单引号或双引号)括起并用空格分隔。

我知道

find . | xargs echo

打印输出在一行,但我不知道如何在每个项目名称周围添加引号。

此代码是bsh脚本的一部分。因此,解决方案可以是一组命令,并使用临时文件来存储中间输出。

非常感谢您的任何建议。

凶猛,我

bash unix find xargs
8个回答
22
投票

这应该工作

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' ' '

33
投票

您也可以使用find“-printf”,如下所示:

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

哪里:

          %p     File's name.

这将用引号括住每个找到的文件,并用空格分隔每个项目。这避免了使用多个命令。


15
投票

试试这个。

find . -exec echo -n '"{}" ' \;

12
投票

你可以使用GNU ls选项--quoting-style来轻松获得你想要的东西。从手册页:

--quoting-style=WORD

使用引用样式WORD作为条目名称:literallocaleshellshell-alwaysshell-escapeshell-escape-alwayscescape

例如,使用命令ls --quoting-style=shell-escape-always,您的输出变为:

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

使用--quoting-style=c,您可以完全重现您想要的示例。但是,如果输出将由shell脚本使用,则应使用正确转义特殊字符的表单之一,例如shell-escape-always


2
投票
for f in *; do printf "'%s' " "$f"; done; echo

或者,感谢Gordon Davisson

printf "'%s' " *; echo

尾随echo只是为输出添加换行符。


2
投票

编辑: 以下答案生成新行分隔的LIST而不是单行。

  1. 我猜测OP使用结果来调用其他命令
  2. 将输出LIST转换为单行很容易(| tr '\n' ' '

一个较少提到的方法是使用-d--delimiterxargs)选项:

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" ]

https://stackoverflow.com/a/33528111/665507


1
投票
    find . | sed "s|.*|\"&\"|"

简要描述;简介: 我们取。*模式的结果并将其放入引号中。 好消息来源是sed。 详细说明: 型号:s / one / ONE /

  • s替代命令。
  • /分隔符。 在我的表达“|”使用而不是“/”来防止像模式s /.*/\"&\"/中的“山”。
  • 一个正则表达式模式搜索模式。
  • ONE替换字符串。
  • 。*表示任何重复无限次数的符号。
  • “意味着”本身。
  • &特殊字符对应于找到的模式。

0
投票

尝试

ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '
© www.soinside.com 2019 - 2024. All rights reserved.