我使用ls -a命令获取目录中的文件名,但是输出在一行中。
是这样的:
. .. .bash_history .ssh updater_error_log.txt
我需要一个内置的替代方法来获取文件名,每一个在一个新的行,像这样:
.
..
.bash_history
.ssh
updater_error_log.txt
我使用ls -a命令获取目录中的文件名,但是输出在一行中。
是这样的:
. .. .bash_history .ssh updater_error_log.txt
我需要一个内置的替代方法来获取文件名,每一个在一个新的行,像这样:
.
..
.bash_history
.ssh
updater_error_log.txt
当前回答
是的,你可以很容易地让ls每行输出一个文件名:
ls -a | cat
解释:ls命令会检测输出是到终端还是文件或管道,并相应地进行调整。
所以,如果你将ls -a管道到python,它应该可以工作,不需要任何特殊措施。
其他回答
ls | tr "" "\n"
你可以用ls -1
Ls -l也会做功
你也可以用ls -w1
这允许设置列的数量。 来自ls的manpage:
-w, --width=COLS
set output width to COLS. 0 means no limit
很简单,只要你的文件名不包含换行:
find . -maxdepth 1
如果你要把它管道到另一个命令中,你可能更喜欢用空字节分隔你的文件名,而不是换行符,因为空字节不能出现在文件名中(但换行符可以):
find . -maxdepth 1 -print0
在终端上打印它可能会显示为一行,因为空字节通常不打印。有些程序可能需要一个特定的选项来处理以空分隔的输入,比如sort的-z。您自己的脚本同样需要考虑这一点。
-1开关是显而易见的方法,但只是提一下,另一个选项是使用echo和双引号内的命令替换,保留空白(这里\n):
echo "$(ls)"
这里还提到了ls命令的行为:
如果标准输出是一个终端,则输出按列(排序)排列 垂直方向)和控制字符输出为问号; 否则,每一行和控制字符列出一个输出 按原样输出。
现在您知道为什么重定向或管道输出每行一个了。