按相反顺序对目录列表进行排序

按相反顺序对目录列表进行排序

我正在尝试按相反的字母顺序对目录列表进行排序。

为什么我会收到随机订单?

    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

相关内容