我正在抓取目录中的所有文件名,并且我想创建这些文件名的逗号分隔字符串,以便我可以将该字符串作为参数传递给应用程序。这是我的代码段:
if [[ -n $(ls | grep lpt) ]]; then
for files in $(find . -maxdepth 1 -type f); do
#parse output into variable fileList
done
fi
我如何做到这一点?
答案 0 :(得分:4)
更容易思考:
find . -maxdepth 1 -type f -printf '%P,' | sed -e 's/,$/\n/'
sed
表达式用换行符替换终端,
。
答案 1 :(得分:1)
您应该使用其他答案中显示的单行,但为了填写您的脚本,您可以这样做:
if [[ -n $(ls | grep lpt) ]]; then
for file in $(find . -maxdepth 1 -type f); do
#parse output into variable fileList
fileList="$file,$fileList"
done
fi
#now remove the trailing comma from the fileList
fileList=$(sed 's/,$//' <<< "$fileList")
(注意:如果你的文件名中有空格,你的for循环将无法正常工作)
答案 2 :(得分:0)
您可以使用find
的{{1}}选项以及shell扩展来代替您的循环:
-exec
fileList=$(find . -maxdepth 1 -type f -exec echo -n "{}," \; | sed 's/,$//')
位只是删除尾随的逗号。 sed
用于编辑输入流,即此处,它从sed
获取管道文本并正在编辑它所获得的内容。由于给定的命令在末尾留下了额外的find
,,
使用其替换命令(sed
)来摆脱它。表格是:
s
所以s/EXPRESSION/REPLACEMENT/
表示“行尾的逗号,因为,$
表示”在行尾“,第二个和第三个斜杠之间的虚弱意味着它被替换为什么都没有。
至于$
中的\;
,这只是使用find
的要求,因此它知道何时完成阅读命令,并且它在手册页中。 :)