find
我正在对查找当前目录中所有文件的命令的结果进行排序:
find . -maxdepth 1 -type f -iname "*.flac" | sort
我期待的是这样的列表:
./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac
./Track 10.flac
./Track 11.flac
我得到的是这样的列表:
./Track 10.flac
./Track 11.flac
./Track 1.flac
./Track 2.flac
./Track 3.flac
...
./Track 9.flac
是否有一个选项sort
可以将它们按字母数字升序排列,以便正确评估数字?
答案1
尝试将-n
和-k2
命令行选项传递给sort
. IE,
find . -maxdepth 1 -type f -iname "*.flac" | sort -n -k2
当我将未排序的文件名放入文件“data.txt”并运行以下命令时:
sort -k2 -n data.txt
我得到这个作为输出:
./Track 1.flac
./Track 2.flac
./Track 3.flac
./Track 9.flac
./Track 10.flac
./Track 11.flac
选项说明:
-n (numeric sort) compare according to string numerical value
-k2 means sort on the 2nd field (and to the end of the line),
you could just restrict it to the second field with -k2,2
你没有问这个,我上面也没有使用它,但有一天它可能会派上用场。
-r reverse sort order
手册页为了sort
请参阅我关于根据不同字段进行排序的相关帖子按第三列排序,保持第一列和第二列不变(在 Linux 中)其中解释了有关排序命令的更多信息。
答案2
在 zsh 中,使用n
通配限定符:
print -l *.flag(n)