
Ubuntu日本語フォーラム

ログインしていません。
写真データファイルの頭を"YYMMDD_hogehoge.jpg"と表現してNautilusで時間順に並ぶように(表示は「一覧」で)試みてます。デジカメデータではなく、昔の紙焼き写真をスキャンしたものが主ですので、中には年月日が不明なものも多く、その部分は「xx」としてみました。
例: 1995年某月某日撮影→ 95xxxx
1995年3月某日撮影→ 9503xx
1995年5月20日撮影→ 950520
1995年8月2日撮影→ 950802
1995年11月某日撮影→ 9511xx
ファイル名の先頭にこれらの英数文字をつけて並べると、Nautilusでは順番は上から
95xxxx → 9503xx → 9511xx → 950520 → 950802 となってしまいます。
不詳な部分があってもできるだけ時系列に沿って並べたいので、この例で「9511xx」が3番目に来て、「5月20日」に撮影したものより「11月某日」に撮ったものが上になる、というのが納得できません。この方法では大量のファイルになると同一年のフォルダ内で撮影日時不明のファイルの位置がかなりめちゃめちゃになるので、何か別のいい方法はないかと考えるのですがどうもうまくいきません。ファイル名にアルファベットと数字が混在した場合、アルファベットが入っているものが優先されるようですが、表示規則を変える手段はないものでしょうか?
オフライン
とりあえず、いまどうして今のような順なのか という部分だけ。
おそらく、MS-Windowsと同じだと思うのですが、数値として見える部分のみを数値として取り出して、昇順に並べているのです。なので、
95 → 9503 → 9511 → 950520 → 950802
という数値の昇順にならんでいるわけです(桁が少ない方が、確実に小さな数値です)
# アルファベットが優先されると言うよりは、数値順に並べるためにアルファベットは無視されている と考えるとわかりやすいかと・・・
何でこんな仕様に というのは、おそらく、ゼロ詰めしていない番号順を正しく認識する為です。
1.txt 2.txt 9.txt 10.txt 20.txt
のような場合、順番に並ぶ と。
なので、もし、設定の変更などによる方法が無い場合は、同じ桁の数値になれば問題ないので、昔のコンピュータ言語のように、「xxの代わりに99(前にするなら00)にする」という手があります。
また、もしかすると、ファイル名の先頭が数字ではなければ、数値比較にはならないかもしれません(951201_hogehoge.jpgを、P951201_hogehoge.jpgのように、なんか統一して1文字つける。未確認。)
根本的には、オプションで数値順から、文字コード順か辞書順で変更できると良いんですが・・・その辺は識者からのコメントをお待ちください・・・
# 文字コード順→ABC...XYZ...abc...xyz。辞書順→AaBbCc...XxYyZz。
オフライン
写真の整理は、 f-spotや picasa などの専門アプリを使いますと、Exif情報を読み込んで撮影日時順に整理してくれたりします。
オフライン
weyk様
早速のコメントありがとうございます。「そういうものだったかあ~」とこの順序規則については納得できました。
で、先頭に別の文字を付けてみる、というものですが、やってみたものの結果は同じでした。
「xx」の部分を「00」もしくは「99」にすると順序はほぼ要求通りになるというのは自分でも前に確認したのですが、
できれば数字以外の「x」なり「@」や「#」など、いかにも「ここは不明な部分ですよ」というのがパッと見てわかるような表現が
ないものかと思って質問した次第です。
オフライン
yama様
コメントありがとうございます。Exifデータのないスキャンデータですので、自分でファイル名を付ける、という作業での話です。
オフライン
とりあえず当座の回避策としては、 ファイル名から「95xxxx」を抜き出してxを0に変えて exif に登録して picasaやf-spotでexif情報を元にソートするという感じですかねえ。
オフライン
もうちょっと調べてみたのですが、大元の条件(名前/サイズ/タイムスタンプ)以外では、あまり調整が出来ないようです。glibの持つファイル名の順序付け用の機能を使用していて、その実装分部のコメントには、「.」と数値分部を特殊扱いするという記述があり、特に数値部分については、
* Numbers are handled by prepending to each number d-1 superdigits
* where d = number of digits in the number and SUPERDIGIT is a
* character with an integer value higher than any digit (for instance
* ':'). This ensures that single-digit numbers are sorted before
* double-digit numbers which in turn are sorted separately from
* triple-digit numbers, etc. To avoid strange side-effects when
* sorting strings that already contain SUPERDIGITs, a '\2'
* is also prepended, like this
*
* file\21 (file1)
* file\25 (file5)
* file\2:10 (file10)
* file\2:26 (file26)
* file\2::100 (file100)
* file:foo (file:foo)
*
* This has the side-effect of sorting numbers before everything else (except
* dots), but this is probably OK.
*
* Leading digits are ignored when doing the above. To discriminate
* numbers which differ only in the number of leading digits, we append
* the number of leading digits as a byte at the very end of the collation
* key.
と、書かれてました。と、すると、おそらく、
951001_hogehoge.jpg を、95-10-01_hogehoge.jpg のように、年月日をあらかじめ区切っておくことで、1つの数値として認識されてしまうのを防ぐぐらいしか手は無さそうです。
# 切り替え(カスタマイズ)は出来なさそう。
オフライン
weyk様
ご教示ありがとうございます。このような「glibの実装部分のコメント云々」を探し当てること自体まだ全然できない初心者だと自覚させられました。
ところで、確かに95-10-01_hogehoge.jpgのように年月日で区切ると要求通りには並びますね。
しかし、これらハイフンを入れる手間及びファイル名が長くなることと、この方法によるメリットを天秤にかけた結果、「00」または「99」で済ます方が得策と判断しました。
これまで色々ご教示下さりありがとうございました。
オフライン