在目录“数据”是这些文件:
command-1.9a-setup
command-2.0a-setup
command-2.0c-setup
command-2.0-setup
我想对文件进行排序,得到这样的结果:
command-1.9a-setup
command-2.0-setup
command-2.0a-setup
command-2.0c-setup
我尝试了这个
find /data/ -name 'command-*-setup' | sort --version-sort --field-separator=- -k2
字符串
但结果是
command-1.9a-setup
command-2.0a-setup
command-2.0c-setup
command-2.0-setup
我找到的唯一能让我得到想要的输出的方法是
tree -v /data
型
我怎么能得到与排序的输出在想要的顺序?
8条答案
按热度按时间pu82cl6c1#
*编辑: 事实证明,伯努瓦是在正确的轨道上排序和罗兰倾斜的平衡 *
你只需要告诉
sort
只考虑 * 字段2(添加“,2”):字符串
*原始答案: 忽略 *
如果你的文件名中没有一个在连字符之间包含空格,你可以尝试这样做:
型
第一个
sed
命令使行看起来像这样(我添加了“10”以显示排序是数字的):型
第二个
sed
命令从每一行中删除前缀版本号。有很多方法会失败。
q1qsirdb2#
如果你指定只考虑第二个字段(
-k2
),不要抱怨它不考虑第三个字段。在你的例子中,运行
sort --version-sort
而不带任何其他参数,也许这样会更好。x7yiwoj43#
看起来像这样工作:
字符串
不是用sort,但它可以工作:
型
-v:按版本对输出进行排序
-i:使树不打印缩进线
-L级:目录树的最大显示深度
ukdjmx9f4#
另一种方法是填补你的数字。
这个例子将所有数字填充为8位数字。然后,它进行一个普通的字母数字排序。然后,它删除填充。
字符串
为了深入了解这是如何工作的,让我们看看填充的排序结果:
型
您将看到,所有数字都被很好地填充为8位数,字母数字排序将文件名按所需的顺序排列。
ao218c7q5#
字符串
4ngedf3f6#
旧帖子,但...
ls -l --sort=version
可能会有所帮助(尽管对于OP的示例,排序与RHEL 7.2中的ls -l
相同):字符串
我猜是YMMV。
ej83mcc07#
我有一个文件夹中的文件,需要得到这些名称的排序顺序,根据数量.例如-
字符串
我需要根据数字来排序。所以我用这个来排序。
型
它给我的文件是根据编号排序的。
wyyhbhjk8#
version-sort可以很容易地用jq实现:
个字符