You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash环境下如何将ls输出追加到文本文件行尾而非新行

解决办法:将两次ls输出合并为同一行追加到文件

我来帮你搞定这个问题!你现在的两次ls命令会各自输出一行内容到practice.txt里,想要把它们的结果合并成同一行、用空格分隔,对吧?之前试的ls -n没用是因为这个参数根本不是用来控制换行的——它的作用是显示数字形式的用户ID和组ID,和输出格式没关系哦~

下面给你几种可行的方法:

方法1:用命令替换直接拼接(最简单)

通过$(command)的形式执行两次ls,shell会自动把命令输出里的换行替换成空格,再用echo把两部分拼起来输出成一行:

echo $(ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz) $(ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz) >> practice.txt

如果你的文件名里没有空格或特殊字符,这个方法完全够用。

方法2:用printf更安全(适合有特殊字符的场景)

如果担心文件名里包含空格(虽然你的场景看起来不会),可以用printf来逐个输出文件名并添加空格,最后再去掉末尾多余的空格:

# 先输出所有文件名加空格,再用sed去掉最后一个空格
printf "%s " $(ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz) $(ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz) | sed 's/ $//' >> practice.txt

方法3:用tr转换换行符

把两次ls的输出放到一个子shell里,然后用tr把所有换行符换成空格,同样可以处理成一行:

# 合并两次ls的输出,将换行转成空格
{ ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz; ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz; } | tr '\n' ' ' >> practice.txt
# 要是不想末尾留空格,就再加一步sed处理
{ ls ${OUTDIR}/{SUB}/rh.*fs6.nii.gz; ls ${OUTDIR}/{SUB}/lh.*fs6.nii.gz; } | tr '\n' ' ' | sed 's/ $//' >> practice.txt

内容的提问来源于stack exchange,提问作者Summer Frandsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:39