sorting - (快速)对 POSIX sh 中的文件列表进行排序

标签 sorting sh posix quicksort

我经常发现自己认为,“如果我在奇怪或受限的机器上需要它”,那么拥有一个尽可能可移植的通用解决方案会很好。

我一直在寻找一种仅使用 POSIX sh 和工具来或多或少有效地以相反顺序对目录中的文件列表进行排序的方法。

这应该适用于任意命名的文件,包括名称中带有控制代码字符(例如换行符)的文件。

最佳答案

所以我们的想法是按照字典顺序逆序处理一组文件。如您所知,由于文件名很奇怪,您无法解析 ls 。因为这是 POSIX,所以我们没有数组。所以这是一个可能有效的解决方案。

Glob 表达式按字典顺序返回可能的文件名列表。所以你可以做类似的事情

for file in /path/to/dir/*; do
    [ -e "${file}" ] || continue
    some_command "${file}"
done

如果你想反转它,你可以这样做:

set -- /path/to/dir/*
i=$#
while [ "$i" -gt 0 ]; do 
    eval "file=\${${i}}"; i=$((i-1));
    [ -e "${file}" ] || continue
    some_command "$file"
done

注意:我们必须使用evil eval用于位置变量的评估。

更新:位置变量可能已被使用。在这种情况下,您可以执行以下操作:

j=$#
set -- /path/to/dir/* "$@"
i=$(($#-$j))
while [ "$i" -gt 0 ]; do 
    eval "file=\${${i}}"; i=$((i-1));
    [ -e "${file}" ] || continue
    some_command "$file"
done
shift "$i"

关于sorting - (快速)对 POSIX sh 中的文件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67069192/

相关文章:

sed - 如何将 sed 命令拆分为多行

c - 有关命令终止这一事实的信息,C 中的 Shell

c - 哪个更适合windows? pthreads 还是 CreateMutex?

c - 在C中制作自己的shell

java - 这个数组偶数和奇数代码有什么问题?

java - 按值列排序 CSV Java

linux - 使用 bash 命令将文件从子文件夹复制到另一个

c - C 中的 POSIX 信号量但仍然存在竞争条件?

mysql - 如何对 MYSQL 中的字母数字列进行排序?

java - Java中大型数据集的基于文件的合并排序