MacからPCにすべての写真をエクスポートしました(Windows 11、PowerShellでUbuntuを実行)。エクスポートは元の作成日を削除し、フォーマットで各ディレクトリ(何千ものフォルダ)を作成しました。
April 1, 2004
Amsterdam, September 18, 2018
Anderson Arbor, March 24, 2011
日付で並べ替えたいです。これらの形式を次のように変更する方法についてのアイデアはありますか?
2004, April 1
2018, Amsterdam, September 18
2011, Anderson Arbor, March 24
または、より良い方法は次のとおりです。
2004-04-01
2018-09-18 Amsterdam
2011-03-24 Anderson Arbor
ベストアンサー1
そしてzsh
:
$ autoload -Uz zmv
$ zmodload zsh/datetime
$ zmv -n '(|(*), )([^ ]## <1-31>, <->)' \
'$(strftime %F $(strftime -r "%B %d, %Y" $3))${2:+ $2}'
mv -- 'Amsterdam, September 18, 2018' '2018-09-18 Amsterdam'
mv -- 'Anderson Arbor, March 24, 2011' '2011-03-24 Anderson Arbor'
mv -- 'April 1, 2004' 2004-04-01
(-n
満足すれば削除(テスト実行))。
zmv
バッチ名を変更するための自動ロード可能なzsh関数。
2つのパラメータが必要です。
- グローバルモード(拡張はそれ自体で行われるため、引用符で囲む必要があります
zmv
)。 - 一致する各ファイルを置き換えるために文字列が評価されます。
置換で一致する各ペアは、...(...)
にあります。$1
$2
ここで、グローバルパターンは(|(*), )([^ ]## <1-31>, <->)
次のとおりです。
(x|y)
またはに一致するので、x
何でもy
一致する(|(*), )
か(2番目のペアにあるため、代替項目で*
終わる)で終了します。$2
(...)
", "
[^ ]
x##
1つ以上のx
sと一致するスペースを除くすべての単一文字と一致するため、スペースではなく[^ ]##
1つ以上の文字で構成されるすべてのシーケンスと一致します。<->
、境界なしの<x-y>
すべての数字と一連の10進数と一致します。
代替では、モジュールstrftime
に組み込まれている関数を使用してからキャプチャされた日付をzsh/datetime
解析(消費)し、フォーマットを再指定します。この組み込み機能はシンプルな標準インターフェースを提供し、それぞれフォーマットとアス機能を提供します。-r
$3
strftime()
strptime()
f
p
time
str
%F
%Y-%m-%d
日付形式を YYYY-MM-DD で表示する略語で、%B
完全月名、%d
特定の日付、%Y
年を表します。
コマンドの置き換えに使用する代わりに、langinfoから月名のリストを取得してから手動で月番号と形式に変換できます。strftime
これは、出力を得るために毎回プロセスをフォークすることを意味します。
zmodload zsh/langinfo
autoload -Uz zmv
months=( ${(v)langinfo[(I)MON_<1-12>]} )
# 1 2 3 4 5
zmv -n "(|(*), )(${(j[|])months}) (<1-31>), (<->)" \
'$5-${(l[2][0])months[(I)$3]}-${(l[2][0])4}${2:+ $2}'
どこ:
${(v)langinfo[(I)MON_<1-12>]}
キーが一致する連想配列の値に展開されますv
。$langinfo
MON_<1-12>
${(j[|])months}
j
oins 配列の要素です|
。$array[(I)$3]
に格納されているパターンに一致する配列要素の最大インデックスを返します$3
。${(l[2][0])string}
l
2
eftはsで文字列の長さを埋めます0
。