我正在使用ls -a
命令获取目录中的文件名,但输出只有一行.
像这样:
. .. .bash_history .ssh updater_error_log.txt
Run Code Online (Sandbox Code Playgroud)
我需要一个内置的替代方法来获取文件名,每个文件名都在一个新行上,如下所示:
.
..
.bash_history
.ssh
updater_error_log.txt
Run Code Online (Sandbox Code Playgroud)
Ber*_*t F 394
使用该-1
选项(注意这是一个"一"数字,而不是小写字母"L"),如下所示:
ls -1a
Run Code Online (Sandbox Code Playgroud)
首先,请确保您的ls
支持-1
.GNU coreutils(安装在标准Linux系统上)和Solaris做; 但如果有疑问,请使用man ls
或ls --help
或查看文档.例如:
$ man ls
...
-1 list one file per line. Avoid '\n' with -q or -b
Run Code Online (Sandbox Code Playgroud)
Pet*_* G. 124
是的,您可以轻松地为ls
每行输出一个文件名:
ls -a | cat
Run Code Online (Sandbox Code Playgroud)
说明:该命令ls
检测输出是输出到终端还是文件或管道,并进行相应调整.
Gil*_*il' 29
Ls是为人类消费而设计的,你不应该解析它的输出.
在shell脚本中,有一些情况解析ls的输出确实有效是实现所需效果的最简单方法.由于ls可能会破坏文件名中的非ASCII和控制字符,因此这些情况是不需要从中获取文件名的子集ls
.
在python中,绝对没有理由调用ls
.Python内置了所有ls
功能.使用os.listdir
列出目录的内容,os.stat
或者os
获取文件的元数据.os
模块中的其他功能也可能与您的问题相关.
如果您通过ssh访问远程文件,那么列出文件名的一种相当强大的方法是通过sftp:
echo ls -1 | sftp remote-site:dir
Run Code Online (Sandbox Code Playgroud)
这会在每行打印一个文件名,与ls
实用程序不同,sftp
不会破坏不可打印的字符.您仍然无法可靠地列出文件名包含换行符的目录,但很少这样做(请记住这是一个潜在的安全问题,而不是可用性问题).
在python中(注意shell元字符必须转义remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
Run Code Online (Sandbox Code Playgroud)
对于更复杂的交互,请在文档中查找sftp的批处理模式.
在某些系统(Linux,Mac OS X,也许是其他一些unices,但绝对不是Windows)上,另一种方法是通过ssh与sshfs挂载远程文件系统,然后在本地工作.
smi*_*ael 10
您还可以使用ls -w1
这允许设置列数。来自 ls 的联机帮助页:
-w, --width=COLS
set output width to COLS. 0 means no limit
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
144558 次 |
最近记录: |