如何只回显 ls 命令的 1 列输出?

Joh*_*ohn 82 ls bash parameter arguments

假设当我执行 ls 命令时,输出是:

file1 file2 file3 file4
Run Code Online (Sandbox Code Playgroud)

是否可以只显示特定的输出列,在这种情况下是 file2?我尝试了以下方法但没有成功:

echo ls | $2
Run Code Online (Sandbox Code Playgroud)

基本上我只想回显第二列,在这种情况下,我想回显:

file2
Run Code Online (Sandbox Code Playgroud)

小智 110

以下命令将ls输出格式化为一列:

ls -1 /directory
Run Code Online (Sandbox Code Playgroud)

  • 我正在寻找的答案,但不是针对 OP 的问题。 (7认同)
  • 但它不仅仅给你 OP 感兴趣的一列。 (2认同)
  • 要使其正确: `ls -1 /directory | 头-2 | tail -1` 或 `ls -1 /directory | perl -ne '打印如果 $. == 2'` (2认同)
  • 这是您认为标题中概述问题的含义的答案,并且它有很多选票和良好的答案,因此是谷歌的热门搜索,这不断强化了反馈循环。 (2认同)
  • 值得指出的是,“-1”是“减去数字一”而不是“减去小写-L”,因为在查看它时可能有点难以区分 (2认同)

Chr*_*own 45

最可靠的方法是将文件放入一个数组中,然后获取第二个,这样就无需进行任何解析:

files=(*)
printf '%s\n' "${files[1]}"
Run Code Online (Sandbox Code Playgroud)

取回文件的顺序取决于 的值LC_COLLATE。因此LC_COLLATE=C,如果您想在所有极端情况下进行“标准”排序,您可能需要先进行设置。


tkr*_*nwa 15

当输出不是终端时,您需要添加-Cas lsusing single-column 模式。 awk然后打印第二列:

ls -C | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)


小智 11

我想你正在寻找

ls -1
Run Code Online (Sandbox Code Playgroud)

它不会在单列中显示权限、所有者、组、日期、大小......而是简单的文件名。

  • 尽管我意识到这对于最初的问题来说是错误的,但这正是我一直在寻找的。所以谢谢。 (3认同)