12/03/30 11:06:21.55
, -'"´  ̄`丶、_
,.∩ `ヽ
〃∪'´ ̄`二二人\ ヽ
| ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
|ハ ,ニ、 ,. - 、 | | | l |
| ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、
| | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔
| ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。
l l /\ .. イV\川 |
,' l l ,イ `l ̄´ / /ヽl l
l | l ハ `メ、 〃 ヽヽ、__ノ
943:名無しさん@お腹いっぱい。
12/03/31 00:58:41.59
dir内の~ がなにかによるんじゃないの。
つーか dir が dest なんだよね。それだとコピーしない気がするけど、するんだね。
rsync はよーしらんから勘違いしてるかな。
944:941
12/03/31 21:41:34.17
すいません、自己解決しました。以下、zshとは関係ない話で恐縮ですがいちおう報告します。
rsyncはタイムスタンプを見てコピーするか否か判断しますが、>>941のファイル書き換え処理が
一瞬で終わるためにタイムスタンプが変化しないのが原因でした。
実際、ls -l --full-timeで見ると↓のように秒以降が全部0になっています。
-rw-r--r-- 1 hoge users 326 2012-03-31 21:24:24.000000000 +0900 file
ちなにみ環境はCentOS6.2です。おそらく、秒以降のタイムスタンプも記録するシステムならば
今回の問題は起こらないはずだと思います。あと、>>941で言った①と②も勘違いでした。
この現象がランダムに出たために、誤って解釈してしまいました。失礼いたしました。
945:名無しさん@お腹いっぱい。
12/04/27 23:45:48.02
ls とかのソートって unsetopt numeric_glob_sort の場合は以下の順ですよね?
特殊文字( _ を除く)
数字
大文字
_
小文字
実は、あるホストへ自宅からログインすると上記の通りなのが、
職場からログインすると「 _ 」の存在が無視されたようにソートされます。
たとえば、A _b C というファイルがA C _b の順でソートされます。
こんなことってあるんですかね?全く同じホストにログインしてるのだから、
もう残る違いはログイン元の端末環境ぐらいしか・・・
946:名無しさん@お腹いっぱい。
12/04/27 23:58:15.17
>>945
> 大文字
> _
> 小文字
> たとえば、A _b C というファイルがA C _b の順でソートされます。
大文字 大文字 _ の順になってる ってのは正常な動作じゃないのか?
947:名無しさん@お腹いっぱい。
12/04/28 00:11:03.30
>>946
すいません、間違えました。以下の意味に訂正します。
「辞書順で A C _B となるのが、A _B C となってしまう」
948:名無しさん@お腹いっぱい。
12/04/28 00:34:14.98
LC_COLLATEの値は?
949:名無しさん@お腹いっぱい。
12/04/28 14:06:53.07
>>948
自宅からの接続ですが、空でした。
こうなったら、自宅からと職場からとで環境変数が同じかどうか調べるしかないですね。
ところで「 _ 」って特殊文字には入らないんですかね?
950:名無しさん@お腹いっぱい。
12/04/28 17:38:50.08
LC_COLLATEをみるなら
それより優先されるLC_ALLと
最後の砦のLANGも見ないと…
951:名無しさん@お腹いっぱい。
12/04/28 21:22:15.90
>>949
ていうか ascii 順でしょ。
952:名無しさん@お腹いっぱい。
12/04/28 21:32:43.75
$ LC_COLLATE=en_US.UTF-8 ls
a _a b _b
$ LC_COLLATE=C ls
_a _b a b
953:名無しさん@お腹いっぱい。
12/04/28 21:59:07.34
てか、「lsとかのソート」の時点でzshもsetoptも関係なくね?
954:名無しさん@お腹いっぱい。
12/04/28 22:08:06.56
そうは思ったがきっとglobの展開のことだと汲み取ってあげたい。
955:名無しさん@お腹いっぱい。
12/04/28 22:10:50.41
lsは表示するファイルを自力でソートしているのでlsの問題。
(directory entryの出現順のままソートせずに表示するオプションがある)
glob展開の結果の順序はシェルの問題。
956:名無しさん@お腹いっぱい。
12/04/28 22:15:19.85
$ LC_COLLATE=en_US.UTF-8 zsh -c 'echo *'
a _a b _b
$ LC_COLLATE=C zsh -c 'echo *'
_a _b a b
957:名無しさん@お腹いっぱい。
12/04/30 00:17:44.41
最近はzshあんま更新されてないし、bashのがいいってまじ?
958:名無しさん@お腹いっぱい。
12/04/30 07:45:44.90
そろそろ5を出そうかというタイミングで何言ってるんだ?
959:名無しさん@お腹いっぱい。
12/05/04 23:55:38.50
>>952
>>956
両方 _a _b a b になるじゃねーか。試しちまった。
960:名無しさん@お腹いっぱい。
12/05/05 11:39:09.60
>>959
え? お前の環境変だろ。LC_ALL設定してしまってるとか。
961:名無しさん@お腹いっぱい。
12/05/05 12:00:08.94
en_US ロカールが定義されているか、未定義かで変わる?
962:名無しさん@お腹いっぱい。
12/05/05 12:10:33.40
各地域ロケールの内容ってどこかで決まってたりするの? 環境依存だと思ってた。
963:名無しさん@お腹いっぱい。
12/05/05 12:12:56.73
>>959 ではないけどやってみた。OSX Lion。
普段の環境は LC_ALL 未定義、LC_MESSAGES=C、LC_TIME=C、他のLC_xxxは未定義、LANG=ja_JP.UTF-8
$ LC_COLLATE=en_US.UTF-8 zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *'
ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=en_US.UTF-8
_a _b a b
$ LC_COLLATE=C zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *'
ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=C
_a _b a b
964:名無しさん@お腹いっぱい。
12/05/05 12:21:42.24
多分、en_US localeをインストールしてない環境ってオチ。それならLC_COLLATE=C と同じになって当然。
965:963
12/05/05 13:42:40.15
うちのzshはここ見てないのかねぇ。
$ ls -l /usr/share/locale/en_US.UTF-8/LC_COLLATE
lrwxr-xr-x 1 root wheel 28 2011-08-02 23:22 /usr/share//locale/en_US.UTF-8/LC_COLLATE -> ../la_LN.US-ASCII/LC_COLLATE
$ ls -l /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
-r--r--r-- 1 root wheel 2086 2011-08-02 23:22 /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
LNってどこだよw
966:963
12/05/05 13:52:07.08
$ strings =zsh | grep strcoll
少なくとも strcoll は呼んでないわー。 libiconvとかはリンクしてるけど。
967:名無しさん@お腹いっぱい。
12/05/05 22:53:05.58
>>960
片方 a _a b _b になるじゃねーか。LC_ALL設定失念しちまった。
なにこれ _a を 1文字として扱ってるの?
>>966
% echo $ZSH_VERSION
4.3.17
% strings =zsh | grep strcoll
strcoll
968:名無しさん@お腹いっぱい。
12/05/06 04:10:16.92
>>967
configure 次第か。
969:名無しさん@お腹いっぱい。
12/05/13 00:17:40.31
以下のように拡張子の前の数字を取り除きたいのですが、zmvでどのように実行をすれば良いでしょうか?
hoge1.mp3 → hoge.mp3 #数字を取り除く
hoge1hoge.mp3 → hoge1hoge.mp3 #そのまま
試行錯誤したのですが、うまく行きません。
以下のように実行すると、"hoge1.mp3"と"hoge1hoge.mp3"を"hoge.mp3"に変換しようとして失敗します。
zmv -n '([a-z]*)[0-9]*.mp3' '$1.mp3'
以下のように実行すると".mp3"に変換しようとして失敗します。
zmv -n '^([a-z]*)[0-9]*.mp3$' '$1.mp3'
970:名無しさん@お腹いっぱい。
12/05/13 00:22:52.56
>>>969
basename使うわけにはいかないの?
971:名無しさん@お腹いっぱい。
12/05/13 02:07:28.60
いつも for で zmv 使ってないから知らんけど '(*)<->.mp3' じゃないか?
多分それ re じゃないよ。
972:名無しさん@お腹いっぱい。
12/05/13 10:25:40.61
それだと
(hoge12)3.mp3
になるぜ
973:名無しさん@お腹いっぱい。
12/05/13 12:02:16.55
自分も普段は for 文を使っちゃうけど
zmv '(*)[0-9]##.mp3' '$1.mp3'
とかでいいのかな。まあ便利なのかもw
974:名無しさん@お腹いっぱい。
12/05/13 12:06:46.39
ああ>>972と同じになってしまうのか
zmv '(*).mp3' '${1%%[0-9]##}.mp3'
かな?
975:名無しさん@お腹いっぱい。
12/05/13 15:41:51.71
おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3'
976:名無しさん@お腹いっぱい。
12/05/13 16:34:24.13
そうか shortest match flag とかはないんだな。
うーん *(#c,)<-> で落ちる。こんなパターン使わないけど。
977:969
12/05/13 17:35:45.22
ありがとうございます。
>zmv '(*).mp3' '${1%%[0-9]##}.mp3'
でうまく行きました。
これは$1のうちの%%と##で挟まれた正規表現を取り除くという書式なのでしょうか?
>おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3'
<-->はどういう処理ですか? こちらは使いかたがよく分かりませんでした。
すみません。zmvのパラメータについて解説しているサイトはありませんか? zmvの書式が難しくて。
978:名無しさん@お腹いっぱい。
12/05/13 18:03:15.98
man zshcontrib
979:名無しさん@お腹いっぱい。
12/05/13 19:04:25.29
>>978
ありがとうございます。
man zmvで見つからない、とか思っていたので。
980:名無しさん@お腹いっぱい。
12/05/13 21:42:08.02
>>977
man zshexpn すれば詳しいことが載っているが ${name%%pattern} と x## の組み合わせだよ
前者はシェルスクリプト一般でよく使われる
<-> は <[x]-[y]> の特殊例で数字にマッチする
981:名無しさん@お腹いっぱい。
12/05/15 01:08:56.08
>>980
ありがとうございます。
ようやく理解できました。
982:名無しさん@お腹いっぱい。
12/05/15 19:43:39.12
man zshall しかうたないな
983:名無しさん@お腹いっぱい。
12/05/16 01:24:52.01
>>982
俺もman zshall派
でもそうすると目当てのものみつけにくいんだよなw
984:名無しさん@お腹いっぱい。
12/05/16 01:34:37.45
使うのは zshall でも人に示すときは絞る
昔から言われてるけど zsh 関係のドキュメントは読み物としては面白くないな
985:名無しさん@お腹いっぱい。
12/05/16 23:36:44.49
言われてた気もするけど今思うに特別そうでもない
986:名無しさん@お腹いっぱい。
12/05/17 12:33:01.23
うん。