我想以下列方式输出文件夹中的项目列表:
"filename1" "filename2" "file name with spaces" "foldername" "folder name with spaces"
换句话说,项目名称必须在一行中,用引号(单引号或双引号)括起并用空格分隔。
我知道
find . | xargs echo
打印输出在一行,但我不知道如何在每个项目名称周围添加引号。
此代码是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”,如下所示:
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脚本使用,则应使用正确转义特殊字符的表单之一,例如shell-escape-always
。
for f in *; do printf "'%s' " "$f"; done; echo
或者,感谢Gordon Davisson:
printf "'%s' " *; echo
尾随echo
只是为输出添加换行符。
编辑: 以下答案生成新行分隔的LIST而不是单行。
| tr '\n' ' '
)一个较少提到的方法是使用-d
的--delimiter
(xargs
)选项:
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" ]
find . | sed "s|.*|\"&\"|"
简要描述;简介: 我们取。*模式的结果并将其放入引号中。 好消息来源是sed。 详细说明: 型号:s / one / ONE /
尝试
ls | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '