私は次のスクリプトを使って写真を「日付」ディレクトリにまとめました。
for x in *.JPG; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
このスクリプトはうまく機能します。私の写真ファイルは、写真の撮影日時「IMG_20131125_090000.JPG」と同じ命名規則に従います。上記のスクリプトを変更して日付ディレクトリに並べ替えますが、ファイルが変更された日付を使用するのではなく、ファイル名に日付を使用する方法はありますか?
ベストアンサー1
回答は20131125の代わりに2013-11-25に修正されました。
互換性のあるシェルを使用してスクリプトをbash
実行する場合、最も簡単な解決策は置き換えることです。
d=$(date -r "$x" +%Y-%m-%d)
そして
d="${x:4:4}-${x:8:2}-${x:10:2}"
exprを使用したポータブルソリューション:
d=$(expr substr "$x" 5 4)-$(expr substr "$x" 9 2)-$(expr substr "$x" 11 2)
ディレクトリ名として2013-11-25の代わりに20131125が必要な場合は、次のこともできます。
sedソリューション:
d=$(echo "$x" | sed 's/.*_\([0-9]*\)_.*/\1/')
このsed
コマンドは、ファイル名をアンダースコア(=日付)の間の数字に変更します。
awkを使用したソリューション:
d=$(echo "$x" | awk -F _ '{print $2}')
カット付きソリューション:
d=$(echo "$x" | cut -d_ -f 2')