次のスクリプトを使用して、写真を「日付」ディレクトリに整理しています。
for x in *.JPG; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
このスクリプトはうまく機能します。私の写真ファイルは、同じ命名規則「IMG_20131125_090000.JPG」、つまり撮影した日付と時刻に従います。上記のスクリプトを変更して、日付ディレクトリに分類するが、ファイルが変更された日付ではなく、ファイル名に日付を使用する方法はありますか?
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')
あなたが使用することができます:
export LC_ALL=C
for x in *.JPG; do
d=$(date -d $( cut -d"_" -f2 <<< ${x} ) +%Y-%m-%d )
mkdir -p "$d"
mv -- "$x" "$d/"
done