এই কোডটি আমি ব্যবহার করছি। এটি YYYYMMDD_originalname.jpg যুক্ত ফটোগুলির নাম পরিবর্তন করে
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
# ignore jpg that have 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# get the date and time from the tag
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
echo "file_$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# check if DateTimeOriginal was present
if [[ "$PIC" == "$DATEMOD2$PIC" ]];then
# as DateTimeOriginal is not present try with HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
# check if HistoryWhen is present
if [[ "$PIC" == "$DATEMOD2B$PIC" ]];then
# nor the tag DateTimeOriginal, nor HistoryWhen present
echo "skip"
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC"
fi
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC"
fi
fi
fi
done
সম্পাদনা করুন। এই সংশোধনীতে, ট্যাগের তারিখটি নামের সাথে এবং স্পর্শ সহ তারিখের বৈশিষ্ট্যটিও প্রেরণ করা হয়। এছাড়াও, যদি সেই ট্যাগগুলি বিদ্যমান না থাকে তবে পরিবর্তনের ট্যাগের তারিখটি ফাইলটির নামে প্রেরণ করা হবে।
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
echo "file_$PIC"
# get the date and time from the tag DateTimeOriginal
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if DateTimeOriginal is 0000... OR empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "datetimeoriginal_$LONGDATE"
# modify the attribute date with the info in the tag date
touch -t $LONGDATE "$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# skip renaming if
# 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2$filename"
fi
else
# get the date and time from the tag HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if Historywhen is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "historywhentag_$LONGDATE"
touch -t $LONGDATE "$PIC"
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2B""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2B$filename"
fi
else
# get the date and time from the tag tag filemodifydate
DATE=$(exiftool -p '$filemodifydate' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if filemodifydate is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
#echo "filemodifydatetag_$LONGDATE"
#touch -t $LONGDATE "$PIC"
DATEMOD2C=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2C_$DATEMOD2C"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2C""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2C$filename"
fi
else
echo "Error, NO date available"
fi
fi
fi
fi
done
ফোল্ডারে বাছাইয়ের জন্য (বছর এবং মাস) (YYYYmm):
exiftool "-Directory<DateTimeOriginal" -d "%Y%m" *