我正在尝试按相反的字母顺序对目录列表进行排序。
为什么我会收到随机订单?
ls -l /usr/bin/ | sort -r
编辑:我不得不使用命令排序。
答案1
让我们ls
进行排序:
ls -l -r /usr/bin
要不就
ls -lr /usr/bin
标准-r
选项,使其ls
按照与其他情况相反的顺序对列表进行排序。如果您要求使用ls
来对修改时间戳进行排序-t
,-r
也会反转该列表的顺序,等等。
您的命令管道根据输出的权限、所有权等进行排序ls -l
,并且不会考虑文件名,除非两个条目的所有其他信息都相同。
您没有询问这一点,但由于这是一件常见的事情,并且通常是询问输出排序后的下一步ls
...要实际从目录列表中提取按第一个或最后一个排序的文件名,不要使用ls
,而是使用数组或位置参数:
第一个文件名:
names=(/usr/bin/*)
printf '%s\n' "${names[0]}"
或者
set -- /usr/bin/*
printf '%s\n' "$1"
最后的文件名:
names=(/usr/bin/*)
printf '%s\n' "${names[-1]}"
或者
set -- /usr/bin/*
shift "$(( $# - 1 ))"
printf '%s\n' "$1"
同样,获取最近修改的文件(或目录)的最佳方法bash
是
set -- /usr/bin/*
newest=$1; shift
for pathname do
[ "$pathname" -nt "$newest" ] && newest=$pathname
done
printf 'Newest: %s\n' "$newest"
将测试更改-nt
为-ot
获取最旧的(最近最少修改的)文件。
答案2
您正在尝试使用整个字符串作为键进行排序。
对象名称写在第9列,因此需要使用:
ls -l /usr/bin/ | sort -k9 -r