我有一个文件列表(来自ls
)。理想情况下,我希望它看起来像这样:
THISPARTISALWAYSTHESAME200_1.JPG
THISPARTISALWAYSTHESAME200_2.JPG
THISPARTISALWAYSTHESAME200_3.JPG
[...]
THISPARTISALWAYSTHESAME200_9.JPG
THISPARTISALWAYSTHESAME200_9_1.JPG
THISPARTISALWAYSTHESAME200_9_2.JPG
[...]
THISPARTISALWAYSTHESAME200_9_10.JPG
THISPARTISALWAYSTHESAME200_9_11.JPG
[...]
THISPARTISALWAYSTHESAME200_9_47.JPG
THISPARTISALWAYSTHESAME200_9_48.JPG
THISPARTISALWAYSTHESAME200_9_49.JPG
THISPARTISALWAYSTHESAME200Map_001.JPG
THISPARTISALWAYSTHESAME200Map_002.JPG
我正在将此列表汇总到ImageMagick convert
函数中以使其成为PDF,因此如上所述将文件按正确的顺序排列会很不错。但是,ls
不会自然地对它们进行排序,导致1-10-11-12-2-20混乱; ls -v
自然地对它们进行排序,但是将地图置于开头,我发现的各种awk
和sort
函数无法处理Map位并使其变得更加有趣。
我认为使用ls -v
的输出并使用awk将包含字符串'map'的每一行移动到最后可能不是那么困难,但我不知道如何去做
答案 0 :(得分:2)
ls -v | awk '{ if($0!~/Map/) print $0; else later[NR]=$0; } END { for (i=1; i<=NR; i++) if ( i in later ) print later[i]; }'
答案 1 :(得分:1)
您也可以通过两次ls
和一些glob/extended-glob patterns的调用来执行此操作:
{ ls -v !(*Map*); ls -v *Map*; } | convert ...