有什么方法可以改变 的输出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 选项。这将省略“页面”。所以这是一个不错的选择