ls 命令-将输出行切换为列

ls 命令-将输出行切换为列

有什么方法可以改变 的输出ls?通常ls显示如下内容:

something something1 something2 something3 

something4 something5 something6 something7

我希望它是这样的:

1. something        5. something4
2. something1       6. something5
3. something2       7. something6
4. something3       8. something7

是否有任何简单的命令来处理这种情况,而无需使用循环和多行代码?

答案1

ls -C按列对当前目录中的文件进行排序。此外,您还可以使用 限制输出的宽度-w。按ls -x行对输出进行排序。(man ls为您提供许多其他选项。)

因此在您的示例中:

$ ls
something   something2  something4  something6
something1  something3  something5  something7
$ ls -x                                         # different ordering
something   something1  something2  something3
something4  something5  something6  something7
$ ls -C                                         # same as ls
something   something2  something4  something6
something1  something3  something5  something7
$ ls -C -w 30                                   # same as ls -w 30
something   something4
something1  something5
something2  something6
something3  something7

顺便说一句:你的问题给出的输出肯定不是 的输出ls -l,而是 的输出ls

答案2

要获得 2 个编号列,请尝试:

ls | pr -2Tn

答案3

如果您打算大量使用它并且想要按顺序编号列出的项目,我会考虑制作一个可以在需要时调用的脚本。

这是一个可以满足您需求的脚本。将其保存到 shell 脚本文件中...我将其命名为“numberlist.sh”。当您想要枚举文件列表时,请将您的工作目录 (cd) 更改为该文件夹,然后使用“sh /filepath/numberlist.sh”调用此脚本

#!/bin/bash

#set a count variable for loop
i=1
#set a formatting for printf
fmt="%-15s\n"
#get working directory
curdir=${PWD}/

#get list of files only, exclude directories
onlyfiles=$(ls -p $curdir | grep -v /)
#create temp file to hold list
tmpfile=$(mktemp /tmp/filelist.XXXXXX)
#iterate through list of files
#number them and add to tempfile
for item in $onlyfiles; do
    printf "$fmt" "$i"."$item" >> "$tmpfile"
    i=$(($i+1))
done

#print the list in columnar order
cat $tmpfile | column
#remove the temp file
rm $tmpfile

答案4

JJoao 的回答是我不知道的……看来你也可以这样做。但是,如果你想阻止列出目录,你可以这样做:

ls -l | grep -v / | pr -2n

但是,格式不同,因此它将长列表分成“页面”。

编辑:错过了 -T 选项。这将省略“页面”。所以这是一个不错的选择

相关内容