如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?


当前回答

看起来答案已经存在了。

如果你愿意 a, b, c格式,使用ls -m (Tulains Córdova的答案)

或者如果你想要bc格式,使用ls | xargs (Chris J回答的简化版本)

或者如果你想要任何其他的分隔符,如|,使用ls |粘贴-sd'|' (Artem ' s answer的应用)

其他回答

一般不建议解析ls,所以另一种更好的方法是使用find,例如:

find . -type f -print0 | tr '\0' ','

或者使用find和粘贴:

find . -type f | paste -d, -s

对于一般的多行连接(与文件系统无关),请检查:Unix命令行上简明而可移植的“join”。

用换行符替换最后一个逗号:

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允许您指定分隔符,在本例中为逗号。

设置IFS和使用“$*”的组合可以实现您想要的功能。我使用了一个subshell,所以我不会干扰这个shell的$IFS

(set -- *; IFS=,; echo "$*")

为了捕获输出,

output=$(set -- *; IFS=,; echo "$*")

编辑:如果您希望分隔符为逗号,则只需“ls -m”

啊,力量和简单!

ls -1 | tr '\n' ','

把逗号“,”改成任何你想要的。注意,这包括一个“尾随逗号”(用于以换行符结束的列表)。