0

各ディレクトリにアクセスし、imagemagick を使用してそれらをモンタージュし、ゲーム用のタイルを作成するスクリプトを作成しました。

find . -type d | while read d; do
        # $k = filename generated from folder name
        montage -border 0 -geometry +0+0 -background none -tile 6x $d/* ~/tiles/$k.png
done

* : を使用すると順序が保持されるためim_0001.png, im_0002.png...、画像に次のような名前を付けるとうまく機能しますが、誰かが次のような画像名を付けた場合は失敗します: im_1.png, im_2.png, ..im_10.png前に来im_2.pngて順序が失敗するためです。ファイル名を常に手動で修正するのは簡単ではありません。ファイル名を列挙する方法はあります*が、強制的に番号順を使用することはできますか? sort 関数にその機能があることは知っていますが、スクリプトでそれを行うにはどうすればよいですか? ファイル名には構造がないため、これを実現する方法に興味があります。

4

2 に答える 2

1

次のように、このプログラムをシステムに追加できます(たとえば)/usr/local/bin/human_sort

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import re

def sortable_list(s):
    elements=re.split( '(\d+)', s.rstrip() )
    for i in range(1, len(elements), 2):
        elements[i]=int(elements[i])
    return elements

for l in sorted(sys.stdin, key=sortable_list):
    sys.stdout.write(l)

その後、それを使用してファイル名を並べ替えます。次のようになります。

=$ ls -1
a
i_1
i_10
i_15
i_20
i_8
i_9
k
m

=$ ls -1 | human_sort 
a
i_1
i_8
i_9
i_10
i_15
i_20
k
m
于 2013-06-27T12:41:06.513 に答える