当输出到一个文件时,ls 的结果在一行中

results of ls in one line when the output goes to a file

ls returns 连接到 stdout 时一行中的文件。

$ ls
a b c

当它重定向到一个文件时

$ ls > foo.txt
$ cat foo.txt
a
b
c

我实现了选项-C

$ ls -C > hoge.txt
$ cat hoge.txt
a b c

但是,当文件列表有很多时,ls 将回车 returns 放在列表中。 喜欢

 a b c d e f g h
 i j k l ....

我怎样才能拥有

 a b c d e f g h i j k l.....(without \n)

我不知道 ls 是否为此提供了一个选项,我还没有查过。 由于这个问题并没有特别要求一个非常快速或计算效率高的解决方案,我建议使用 lssed:

来合成一个命令
ls "$dir" | sed -z 's/\n/ /g'

它采用 ls 输出并将所有换行符 \n 替换为空格。 -z 开关是必需的,否则 sed 将面向行工作,并且 sed 的模式匹配器永远不会看到 \n。 如果 $dir 中的其中一个文件名包含空格,您将遇到问题。

如果计算效率是一个问题,我建议搜索这样的选项 (man ls) 或编写一个程序来做到这一点(例如,使用 C 语言)。

尝试以下解决方案,

echo -E $(ls -1 dir) > file.txt

哪里

-1 单列打印o/p

-E 禁用反斜杠转义的解释

来源:this serverfault 页面

这样做就可以了:

ls | xargs > foo.txt