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

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

可以说,当我执行 ls 命令时,输出是:

file1 file2 file3 file4

是否可以仅显示输出的某一列,在本例中为 file2?我尝试了以下方法但没有成功:

echo ls | $2

基本上我想做的就是仅回显第二列,在这种情况下,我想回显:

file2

答案1

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

ls -1 /directory

答案2

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

files=(*)
printf '%s\n' "${files[1]}"

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

答案3

当输出不是终端时,您需要添加-Casls使用单列模式。 awk然后打印第二列:

ls -C | awk '{print $2}'

答案4

正如已经提到的 - 使用列来解析ls输出不是很强大,因为ls根据文件名长度和终端宽度来断行。显示元素列表的单列通常很有趣。您可以使用 cut 命令来执行此操作:

echo file1 file2 file3 file4 | cut -d" "  -f2

将显示

file2

请注意,-d允许您选择列分隔符,例如

cut -d, -f2

您可以显示逗号分隔列表的第二列。

相关内容