finderでの名前のつけ方_数字の大きい名前を先に

        使用環境        

iMac 27インチ

OS 10.10.5 Yosemite

                    


finderでの名前のつけ方に関する質問です。


同フォルダに入れたファイル群の中から

一部のファイルだけ表示順序を降順にすることは、

名前のつけ方を工夫することで可能でしょうか。


現在、過去の歴史上の人物の画像を集めて、一つのフォルダで管理しています。

名前のつけ方は、例えば


01_BC_0384_アリストテレス.jpg

01_BC_0428_プラトン.jpg

02_AC_0001_キリスト.jpg


のようにして、finderの表示形式は「カラム表示」にしております。


上記のファイル名は、以下のようなルールでつけております。


最初の2桁の数字は、紀元前=「01」、紀元後=「02」というように、

紀元後よりも紀元前が並び順で先に来るようにしています。

そして、BCACは、それぞれ紀元前紀元後

さらに、4桁の数字年数を表しており、

最後に、人物名となっております。


ここで問題なのが、紀元前は数字が大きいほど古いので、

年数の数字が大きいものを先に表示してほしいのです。

しかし実際は、数字が小さいものが先に表示されるため、

紀元前に限っては、古いものが新しいものより後に表示されるようになってしまいます。

なにか良い方法がないかと調べたり、考えてもみたのですが

うまくいかず。


皆様のお知恵を拝借できればと思い、投稿させていただきました。

よろしくお願いいたします。

iMac, OS X Yosemite (10.10.5)

投稿日 2015/09/20 02:58

返信
返信: 42

2015/09/20 22:01 アトラス への返信

ざっと思いつくところでは

・BC と AD を別フォルダにする (これが一番簡単)

・ユリウス日を先頭に付ける 例: 1564731-BC0428-プラトン.jpg

・ファイルのコメントに連番を付け、コメント順で (カラム表示ではなく) リスト表示 (あまり現実的ではない...)

・BC は無かったことにする


ーーーーー


参考


ユリウス通日

https://ja.wikipedia.org/wiki/ユリウス通日


ユリウス日

http://eco.mtk.nao.ac.jp/cgi-bin/koyomi/cande/date2jd.cgi


※ ユリウス日への換算サービスはいくつかありますが、計算方法により結果が異なる場合があります。複数のサイトを併用する際はその辺に注意してください。

2015/09/20 22:01 アトラス への返信

失礼致します。 01/02と、BC/ACとは同じ分類基準ですよね。 これらを2つ並べる必要はないと思うのですが如何でしょうか? どちらかを省略してもよいのであれば、01/02の方をとって、Hiro.Sさんが紹介してくださったユリウス通日/通年をファイル名の先頭につけると良いのではないでしょうか?

2015/09/20 08:10 アトラス への返信

失礼します。

Finderでの表示順を「一部のファイルだけ表示順序を降順」にすることは不可能です。

ファイル名で順序を指定したいなら一つのルールに統一するしかありません。

(アトラスさんの求めているのは、ADなら昇順/BCなら降順/BC<AD、の三つのルール)


* ファイル名のつけ方のルールの変更

Hiro.Sさんが提案されたようにユリウス日を使うのも一つの選択です。

また、年が4桁限定で日付が無いなら、単純にBC10000年からの経過年数の5桁でもよいでしょう。こちらなら暗算で可能ですし^^;

(例)

  • BC.100 → 09900_BC_0100〜
  • AD.100 → 10099_AC_0100〜

(ソートだけが問題ならAC100→10100のほうがわかりやすいかも)


* 他の属性を利用

ファイル名のルールを変更したくないなら、他の属性を使うしかありません。

Hiro.Sさんもコメントの利用を提案されていましたが、他にもファイルの変更日を使う方法も考えられます。

(例)

  • BC.abcd → 1999年(11-a)月(11-b)日 c 時 d 分
  • AD.abcd → 2000年 a 月 b 日 c 時 d 分

もっとも、変更日はファイルを修正すると当然変わってしまいますし、Finderから直接設定できるものでもないのでApple Scriptかターミナルからのコマンドを使って行うなどの方法で設定する必要があります。


とりあえず、思いつくのはこんなところです。

2015/09/20 22:06 Hiro__S への返信

いろいろな解決案ありがとうございます。


ユリウス歴というものは存じませんでした。たしかにそれを使えば、

西暦を使わないのでコンピュータ上では扱いやすいかもしれません。


紀元前と紀元後でフォルダが分かれてしまうのは、個人的に好まないので

別の暦を頭につけるのは解決策としてありかと思いました。


ご参考にさせていただきます。ありがとうございます。

2015/09/20 22:41 T22T への返信

ご回答ありがとうございます。


たしかに「01」と「BC」、「02」と「AC」は同じ分類基準です。

当初、西暦によるファイル管理を念頭において考えていたので、

BCが昇順で表示されるようにつけたタグ的な意味合いです。


仰る通りユリウス歴をファイル名の頭につけてデータを管理すれば、

「01」「02」は必要なくなります。


ご参考にさせていただきます。ありがとうございました。

2015/09/20 22:58 ToMi への返信

ご回答ありがとうございます。


Finderでの表示順を「一部のファイルだけ表示順序を降順」にすることは不可能です。

ファイル名で順序を指定したいなら一つのルールに統一するしかありません。


やはりそうですか。「*-+/」などの記号を用いて

私のような特殊な要望に対応できる裏技的なコードがあるかと思ったりもしましたが

そんな都合の良いことはないですね。。。


Hiro.Sさんが提案されたようにユリウス日を使うのも一つの選択です。

また、年が4桁限定で日付が無いなら、単純にBC10000年からの経過年数の5桁でもよいでしょう。こちらなら暗算で可能ですし^^;

(例)

  • BC.100 → 09900_BC_0100〜
  • AD.100 → 10099_AC_0100〜

(ソートだけが問題ならAC100→10100のほうがわかりやすいかも)


ユリウス暦は、いろいろな場面で活用できそうな感じですが、

私の扱うファイルの観点からいくと、馴染みのない暦を使うので

調べる必要が出てきて、その都度小さな手間がかかりそうです。

しかし、ToMiさんの案でしたら、単純な計算で済みそうなので

これでやってみようと思います。


幸い、私の扱っているものが主に哲学者なので、そこまで桁数が必要ないので。

余談ですが、地球や宇宙の歴史となるとすごい桁数になりそうですね。


* 他の属性を利用

ファイル名のルールを変更したくないなら、他の属性を使うしかありません。

Hiro.Sさんもコメントの利用を提案されていましたが、他にもファイルの変更日を使う方法も考えられます。

(例)

  • BC.abcd → 1999年(11-a)月(11-b)日 c 時 d 分
  • AD.abcd → 2000年 a 月 b 日 c 時 d 分

もっとも、変更日はファイルを修正すると当然変わってしまいますし、Finderから直接設定できるものでもないのでApple Scriptかターミナルからのコマンドを使って行うなどの方法で設定する必要があります。


たしかにこの方法でしたら、ファイル名の文字列自体は必要最低限で済みそうですが、

データ上書きすると変わってしまうのがネックですね。



ご提案、ありがとうございました。

2015/09/20 23:15 アトラス への返信

皆様のおかげで無事に解決できました。

ありがとうございました。


ただ一つ問題がありまして、

ToMiさんの回答で「問題が解決した」としたかったのですが、

誤って自分の返信に対して「問題が解決した」としてしまいました。


慌てて取り消す方法を調べてみたのですが、

方法が分からず取り消せなさそうです…


取り消す方法がありましたらご教授いただきたく。

申し訳ございません。

2015/09/21 00:06 アトラス への返信

残念ながらこのボードでは「解決済み」を変更することはできない仕様になってるようです。次から正確にマークする...ということで良いのではないでしょうか。ちなみに私も ToMi さんの暗算方式に一票。ユリウス日は難しいですよね。


それと、ファイルの作成日/変更日についてですが、HFS+ の仕様では1904年1月1日からしか設定できないので、本件には向いてないと思います。

2015/09/21 01:12 アトラス への返信

アトラスさん、


興味深いトピックなので拝見していました。もう解決しているようですが....遅コメントします。


やはりファイルの名称は、完全に人間の見やすいように、ファイル列を「入力専用のフォルダ」に作成。;

BC_0384_アリストテレス.jpg

BC_0428_プラトン.jpg

AC_0001_キリスト.jpg

としておく。


他 方、なんらかのスクリプトで年号の部分からユリウス日を計算して、ユリウス日列を作り、ユリウス日列とファイル列をユリウス日順とか逆順とかでソートす る。その時に連番も用意。それを「表示専用のフォルダ」に置く。ファイルは「入力専用のフォルダ」とリンクさせて、連番も先頭に付ける。


利用者には「表示専用のフォルダ」を見てもらい、Finderでは名前順に表示に設定していただく。

2015/09/21 01:58 mNeji への返信

解決済みということで貼らなかったものを復活。削除する寸前でした 笑。


ユリウス日を求める AppleScript です。使い方はダイアログに年数を入力。紀元前は「マイナス記号」を付けます。例: 紀元前384年は「-384」と入力。


結果については先のコメントに書いた国立天文台の換算サービスで「x年1月1日 0時0分0秒」としたものと同じになると思います。多分...。歴史学と数学の違いによるズレや誕生日問題がありますが、本件に関しては順番さえちゃんとしてれば良いのでこれでも良いかなと。


AppleScript

on run display dialog "Input" default answer "" my jdn(text returned of result) end run on jdn(n) do shell script "ruby <<'EOF' - " & n & " require 'date' def jdate(d) d1 = Date.new(-4712, 1, 1) d2 = Date.new(d.to_i, 1, 1) return (d2 - d1).to_i end puts jdate(ARGV[0]) EOF" end jdn


ーーーーー


以下はダイアログで選択したフォルダ内にある「.jpg」と「.png」をリネームする AppleScript です。元ファイルの名称が「フラグ_紀元_nnnn_名前.拡張子」ではない場合と、変換後のファイルが既存の場合はスキップします。


変換規則は

フラグ_紀元_nnnn_名前.拡張子 → JDN_紀元nnnn_名前.拡張子


例:

01_BC_0384_アリストテレス.jpg → 1580802_BC0384_アリストテレス.jpg

01_BC_0428_プラトン.jpg → 1564731_BC0428_プラトン.jpg

02_AC_0001_キリスト.jpg → 1721424_AC0001_キリスト.jpg


AppleScript

on run try my julian(choose folder) on error err_msg return err_msg end try end run on julian(dir) do shell script "cd " & quoted form of POSIX path of dir & " || exit 1 LANG=ja_JP.UTF-8 ruby <<'EOF' require 'date' def jdate(d) d1 = Date.new(-4712, 1, 1) d2 = Date.new(d.to_i, 1, 1) return (d2 - d1).to_i end Dir.glob('*.{jpg,png}').each do |fpath| dname = File.dirname(fpath) fname = File.basename(fpath) f = fpath.split('_') next if /^(?:01|02)_(?:BC|AC|AD)_[0-9]{4}.*?$/ !~ fname sign = f[0] == '01' ? '-' : '' jdn = jdate(sign + f[2]) new_fname = jdn.to_s + '_' + f[1] + f[2] + '_' + f[3] new_fpath = [dname, new_fname].join(File::SEPARATOR) File.rename(fpath, new_fpath) unless File.exists?(new_fpath) puts %[#{fname} → #{new_fname}] end EOF" end julian


ーーーーー


ついでにもう一丁。Ruby 版です。


Ruby

#!/usr/bin/ruby # usage: ruby me.rb file1 file2 ... require 'date' def jdate(d) d1 = Date.new(-4712, 1, 1) d2 = Date.new(d.to_i, 1, 1) return (d2 - d1).to_i end exit if ARGV.size < 1 ARGV.each do |fpath| dname = File.dirname(fpath) fname = File.basename(fpath) f = fname.split('_') next if /^(?:01|02)_(?:BC|AC|AD)_[0-9]{4}.*?$/ !~ fname sign = f[0] == '01' ? '-' : '' jdn = jdate(sign + f[2]) new_fname = jdn.to_s + '_' + f[1] + f[2] + '_' + f[3] new_fpath = [dname, new_fname].join(File::SEPARATOR) File.rename(fpath, new_fpath) unless File.exists?(new_fpath) puts new_fname end


実行は

$ ruby julian.rb file1 file2 ...


または、chmod +x して

$ ./julian.rb file1 file2 ...


動作確認は Mac OS X 10.6.8。Yosemite でも多分大丈夫だとは思いますが、ダメな場合はどなたか直して戴けるとありがたいです。以上、何かの参考になればと。

2015/09/21 01:49 アトラス への返信

お力になれてよかったです。


なお、今回は不採用になった変更日利用について今後のために補足と修正を少し。


まず、最初に修正を

誤:BC.abcd → 1999年(11-a)月(11-b)日 c 時 d 分

正:BC.abcd → 1999年(11-a)月(11-b)日 (11-c) 時 (11-c) 分

>> データ上書きすると変わってしまうのがネックですね。

そうなんですよね。提案しておいてなんですが、(特に更新が多い場合に)運用が難しいのは認めます。

変更日ではなく作成日を使えばこの点は回避できるのでしょうけど、それを標準でもってる機能で行う方法を知らなかったので妥協した提案になりました。

また、常にファイルをそのフォルダへコピーするだけであればフォルダアクションで行うことも可能でしょうけど。直接修正を行ったりする場合などに対応できません。

フォルダを開いたときにスキャンして更新とかも考えましたが、数が増えてくると開く動作が遅くなってしまうという問題もでてきます。

(工夫すれば許容範囲に収められるのかもしれませんが、Apple Script/Folder Actionについては詳しくないので)


>> Hiro.Sさん「1904年1月1日からしか設定できない」

その点は理解してます。USBメモリとかよく使われるFATとかだと1980年以降になりますし。

ですので、そのまま年に使うのではなく桁ごとに月日時分に振り分けるような形にしました。

2015/09/21 02:25 アトラス への返信

度々、失礼致します(皆さんからいろいろなアイデアが紹介されていので、とても参考になります)。


mNejiさんが提案してくださった方法と似ているのですが、閲覧専用の別フォルダを新たに作成し、そこへ画像ファイルのエイリアスを保存して、このエイリアスに連番をつけるという方法もありそうです。 これだと参照元のファイル名を変更する必要はありませんし、エイリアスなので削除や名前の付け替え等がかなり自由にできそうです。 ただ、エイリアスに連番をつける際には、Finderの表示を『カラム表示』から『リスト表示』に変更した上で、まず、BCのファイルを降順にならべて、連番をつけて、 次に、ACのファイルを昇順にならべて続きの連番をつける作業になりそうです。 連番付けの操作は、Finderで複数のエイリアスを選択して、右クリック(コントロールクリック)すると『*項目の名前を変更…』のコマンドが表示されるので、それを選択して表示されるダイログから、『フォーマット』を選択して、各種設定を行います。

2015/09/21 03:18 ToMi への返信

ToMi さんによる書き込み:


その点は理解してます。USBメモリとかよく使われるFATとかだと1980年以降になりますし。

ですので、そのまま年に使うのではなく桁ごとに月日時分に振り分けるような形にしました。


済みません。ちゃんと読んでませんでした...。


ToMi さんによる書き込み:


変更日ではなく作成日を使えばこの点は回避できるのでしょうけど、それを標準でもってる機能で行う方法を知らなかったので妥協した提案になりました。


ファイルの作成日はこんな感じで変更できます。Yosemite であれば ASOC (AppleScript Objective-C) の方が良いかもしれませんが、当方の環境では試すことができません...。残念。

#!/usr/bin/python # -*- coding: utf-8 -*- # usage: python me.py 'yyyy-MM-dd HH:mm:ss' file1 file2 ... import sys, os, re from Foundation import * cd = sys.argv[1] lc = NSLocale.alloc().initWithLocaleIdentifier_('en_US_POSIX') df = NSDateFormatter.alloc().init() df.setLocale_(lc) df.setDateFormat_('yyyy-MM-dd HH:mm:ss') attrs = [] attrs.append({NSFileCreationDate : df.dateFromString_(cd)}) for f in sys.argv[2:]: if not os.path.isfile(f): continue for a in attrs: NSFileManager.defaultManager().setAttributes_ofItemAtPath_error_( a, f.decode('utf-8'), None ) print(f)


実行は

$ python set_cdate.py 'yyyy-MM-dd HH:mm:ss' file1 file2 ...


$ python set_cdate.py '1999-11-11 11:11:11' 'foo.jpg'

2015/09/21 04:34 Hiro__S への返信

Hiro.Sさん、


最近はzshばかりで、指も頭も退化しています。で、Pythonの事例があったので~/myPythonを作り、ご紹介のスクリプトを「sf」として実行権を付与しました。このディレクトリに「tal.jpg」を用意して「python ./sf '1999-11-11 11:11:11' 'tal.jpg'」としましたがなにも変わりません。プログラムの内容を咀嚼しないままお尋ねするのは申し訳ありませんが、ヒントを下さるとありがたいです。


その時のターミナルの記録をお示しします;

図1

ユーザがアップロードしたファイル

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

finderでの名前のつけ方_数字の大きい名前を先に

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。