如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?
当前回答
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。
其他回答
你可以使用:
ls -1 | perl -pe 's/\n$/some_delimiter/'
快速Perl版本与尾随斜杠处理:
ls -1 | perl -E 'say join ", ", map {chomp; $_} <>'
解释:
perl -E:执行perl的特性支持(例如,…) 说:打印与载体返回 join ", ", ARRAY_HERE:用","加入数组 地图{切齿;$_} ROWS:从每一行中删除载体返回并返回结果 <>: stdin,每一行都是一个ROW,与映射耦合将创建每个ROW的数组
如果你喜欢Python3,你可以这样做(但是请解释为什么你会这样做?):
ls -1 | python -c "import sys; print(','.join(sys.stdin.read().splitlines()))"
用换行符替换最后一个逗号:
ls -1 | tr '\n' ',' | sed 's/,$/\n/'
Ls -m包含屏幕宽度字符处的换行符(例如第80行)。
主要是Bash(只有ls是外部的):
saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS
在Bash 4中使用readarray(又名mapfile):
readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS
感谢gniourf_gniourf的建议。
如果你的xargs版本支持-d标志,那么这应该可以工作
ls | xargs -d, -L 1 echo
-d是分隔符标志
如果没有-d,那么可以尝试以下操作
ls | xargs -I {} echo {}, | xargs echo
第一个xargs允许您指定分隔符,在本例中为逗号。