dateinamen_und_verzeichnisnamen_automatisiert_aendern
Inhaltsverzeichnis
Dateinamen und Verzeichnisnamen automatisiert ändern
/home/bin/gross_in_klein.sh
DigiCam - Namen der Fotos und Filme nach der Aufnahmezeit benennen
Alle mir bekannten DigiCams tragen das Aufnahmedatum mit Urzeit in die Metadaten der Fotos ein. Leider ist das bei den Filmen nicht immer der Fall, in dem Fall muss man die "Modify"-Zeit (wie sie auf dem Dateisystem eines POSIX-konformen Betriebssystemes wie z.B. bei FreeBSD oder Linux Standard ist) verwenden. Das ist zwar nicht ideal aber besser geht es nicht…
FreeBSD und Linux
Dieses Script wurde für die Fotos und Filmen dieser DigiCams geschrieben, und wurde nur auf den Betriebssystemen FreeBSD und Linux getestet:
- Minolta DiMAGE Z1
- Sony Cyber-shot DSC-W100
- Canon DIGITAL IXUS 80 IS
- Pentacon luxmedia 12-04
- KODAK PLAYSPORT Video Camera Zx5
- Sony Ericsson C702 Cyber-shot Handy
/home/bin/fotos_und_filme_umbenennen.sh
#!/bin/sh
ERSTENDUNG='thm log txt sh' # Endungen, die bevorzugt bearbeitet werden sollen
# Dieses Script benennt Fotos und Filme von DigiCams so um,
# dass die Aufnahmezeit bestandteil des Dateinamens ist.
# z.B.:
# [Jahr]-[Monat]-[Tag]_-_[Stunde]_[Minute]_[Sekunde]_-_[laufende Nr].jpg
#==============================================================================#
###
### DigiCams, dessen Fotos und Filme mit diesem Script vernünftig
### umbenannt werden:
###
#
# ### Minolta DiMAGE Z1
# mv pict0083.jpg 2006-08-16_-_17-08-44_-_0083.jpg
# Foto: 2009:03:21 12:16:45
# Film: (Filme dieser Kamera enthalten in den META-Daten
# keine Zeitangaben, hier muss man die "Modify"-Zeit
# des Dateisystems verwenden!)
#
# ### Sony Cyber-shot DSC-W100
# mv dsc00502.jpg 2006-08-16_-_17_08_44_-_00502.jpg
# Foto: 2007:06:09 12:07:43
# Film: (Filme dieser Kamera enthalten in den META-Daten
# keine Zeitangaben, hier muss man die "Modify"-Zeit
# des Dateisystems verwenden!)
#
# ### Canon DIGITAL IXUS 80 IS
# mv img_1518.jpg 2006-08-16_-_17_08_44_-_1518.jpg
# Foto: 2010:02:14 17:45:55
# Film: Sat May 15 20:29:47 2010
#
# ### Pentacon luxmedia 12-04
# mv DSCI0001.AVI 2011-08-16_-_17_08_44_-_0001.avi
# mv DSCI0002.JPG 2011-08-16_-_17_24_28_-_0002.jpg
# Foto: 2011:08:14 15:33:33
# Film: (Filme dieser Kamera enthalten in den META-Daten
# keine Zeitangaben, hier muss man die "Modify"-Zeit
# des Dateisystems verwenden!)
#
# ### KODAK PLAYSPORT Video Camera Zx5
# mv 100_0011.MP4 2012-01-27_-_15_49_08_-_100_0011.MP4
# Foto: 2012:01:27 14:55:50
# Film: (Filme dieser Kamera enthalten in den META-Daten
# keine Zeitangaben, hier muss man die "Modify"-Zeit
# des Dateisystems verwenden!)
# => THM: 2012:01:27 14:55:50
#
# ### Sony Ericsson C702 Cyber-shot Handy
# mv DSC00094.JPG 2011-10-09_-_08_12_41_-_00094.jpg
# mv MOV00056.MP4 2011-10-08_-_14_37_06_-_00056.mp4
# Foto: 2011:10:09 08:12:41
# Film: (Filme dieser Kamera enthalten in den META-Daten
# keine Zeitangaben, hier muss man die "Modify"-Zeit
# des Dateisystems verwenden!)
#
#------------------------------------------------------------------------------#
#
# ### FreeBSD: Konvertierungsbeispiel für Zeitformate
# date -j -f '%a %b %d %T %Z %Y' "$(date)" "+%Y-%m-%d_-_%H_%M_%S_-"
# %a %b %d %T %Z %Y
# Sat May 29 02:24:22 CEST 2010
# date -jf "%a %b %d %T %Y" "Tue May 19 08:57:48 2009" +"%Y-%m-%d_-_%H_%M_%S_-"
#
# "[Jahr]-[Monat]-[Tag]_-_[Stunde]_[Minute]_[Sekunde]_-"
# [Jahr]-[Monat]-[Tag]_-_[Stunde]_[Minute]_[Sekunde]_-_[laufende Nr].jpg
#
#==============================================================================#
if [ -z "${1}" ] ; then
echo "${0} [Verzeichnis]"
echo "z.B.:"
echo "${0} ."
echo "${0} 100DICAM"
exit 1
else
DATEIEN="$(find ${@} -type f | sort -n)"
fi
OS="$(uname -s)"
if [ "${OS}" = "NetBSD" -o "${OS}" = "FreeBSD" -o "${OS}" = "OpenBSD" ] ; then
echo "OS: BSD"
DATUMZEIT1()
{
### Meta-Zeit im Normalformat vom Foto
ZEITSTEMPEL="$(date -jf '%Y-%m-%d %T' "${METAZEIT}" +'%Y-%m-%d_-_%H_%M_%S')"
DATUM="$(date -jf '%Y-%m-%d %T' "${METAZEIT}" +'%Y-%m-%d')"
}
DATUMZEIT2()
{
### Meta-Zeit vom Film (DSCI, MOV)
# Mon Feb 13 01:45:46 2012
ZEITSTEMPEL="$(date -jf '%a %b %d %T %Y' "${METAZEIT}" +'%Y-%m-%d_-_%H_%M_%S')"
DATUM="$(date -jf '%a %b %d %T %Y' "${METAZEIT}" +'%Y-%m-%d')"
}
DATUMZEIT3()
{
### ohne Meta-Daten wird die "Modify-Time" verwendet
ZEITSTEMPEL="$(stat -f %Sm -t '%F %T' ${_datei} | awk -F'.' '{sub(" ","_-_");gsub(":","_");print $1}')"
DATUM="$(stat -f %Sm -t '%F' ${_datei})"
}
elif [ "${OS}" = "Linux" ] ; then
echo "OS: Linux"
DATUMZEIT1()
{
### Meta-Zeit im Normalformat vom Foto
ZEITSTEMPEL="$(date -d "${METAZEIT}" +'%Y-%m-%d_-_%H_%M_%S')"
DATUM="$(date -d "${METAZEIT}" +'%Y-%m-%d')"
}
DATUMZEIT2()
{
### Meta-Zeit vom Film (DSCI, MOV)
# Mon Feb 13 01:45:46 2012
ZEITSTEMPEL="$(date -d "${METAZEIT}" +'%Y-%m-%d_-_%H_%M_%S')"
DATUM="$(date -d "${METAZEIT}" +'%Y-%m-%d')"
}
DATUMZEIT3()
{
### ohne Meta-Daten wird die "Modify-Time" verwendet
ZEITSTEMPEL="$(stat -c '%y' ${_datei} | awk -F'.' '{print $1}' | awk -F'.' '{sub(" ","_-_");gsub(":","_");print $1}')"
DATUM="$(stat -c '%y' ${_datei} | awk '{print $1}')"
}
else
echo "OS: unbekannt"
echo "Dieses Script ist nicht für dieses Betriebssystem geschrieben worden. ABBRUCH!"
exit 1
fi
#------------------------------------------------------------------------------#
for _erst in ${ERSTENDUNG}
do
unset _datei
for _datei in $(echo "${DATEIEN}" | egrep -i "[.]${_erst}$")
do
if [ -z "$(echo "${DATEILISTE}" | egrep "^${_datei}$")" ] ; then
DATEILISTE="$(echo -e "${DATEILISTE}\n${_datei}")"
fi
done
unset _datei
for _datei in $(echo "${DATEIEN}" | egrep -iv "[.]${_erst}$")
do
if [ -z "$(echo "${DATEILISTE}" | egrep "^${_datei}$")" ] ; then
DATEILISTE="$(echo -e "${DATEILISTE}\n${_datei}")"
fi
done
done
#------------------------------------------------------------------------------#
UMBENENNEN()
{
# ZEITSTEMPEL NNAME _datei VERZEICHNIS DATUM ZIEL VNAME
# umbenennen
if [ -n "${ZEITSTEMPEL}" -a -n "${NNAME}" ] ; then
### hier werden die Dateien umbenannt
if [ -r "${_datei}" ] ; then
if [ ! -s "${VERZEICHNIS}"/"${DATUM}"/"${ZIEL}" ] ; then
### hier werden die Dateien nur umbenannt, wenn sich der Name ändert
#echo "mkdir -p ${VNAME}/${DATUM}/"
mkdir -p ${VNAME}/${DATUM}/
#echo "mv -v ${_datei} ${VNAME}/${DATUM}/${ZEITSTEMPEL}_-_${NNAME}"
mv -v ${_datei} ${VNAME}/${DATUM}/${ZEITSTEMPEL}_-_${NNAME}
else
echo "${ZIEL} existiert schon"
fi
fi
else
echo "${_datei}: Kein Datum in den META-Daten gefunden!"
fi
}
#------------------------------------------------------------------------------#
unset _datei
for _datei in ${DATEILISTE}
do
ENDUNG="$(echo "${_datei}" | rev | awk -F'.' '{print tolower($1)}' | rev)"
if [ "${ENDUNG}" == "log" -o "${ENDUNG}" == "txt" -o "${ENDUNG}" == "sh" ] ; then
# nix tun
echo -n '.'
else
echo "-----------------------------------------------------------"
VNAME="$(dirname ${_datei})"
BNAME="$(basename ${_datei})"
#NNAME="$(echo "${BNAME}" | awk '{print tolower($1)}' | sed -e 's/pict//;s/imag//;s/img//;s/dsci//;s/dsc//;s/mvi//')"
NNAME="$(echo "${BNAME}" | awk '{print tolower($1)}')"
METAZEIT="$(strings ${_datei} | head -n100 | sed -n '1,/3br/ p' | egrep '^[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]' | head -n1 | sed -e 's/:/-/;s/:/-/')"
### der Meta-Daten entsprechend weiter machen
#echo "${BNAME} | METAZEIT: '${METAZEIT}'"
if [ -n "${METAZEIT}" ] ; then
# Standardformat
DATUMZEIT1
if [ "${?}" != "0" ] ; then
# alternatives Format
DATUMZEIT2
fi
else
### ohne Meta-Daten wird die "Modify-Time" verwendet
DATUMZEIT3
fi
### der Endung entsprechend weiter machen
if [ "${ENDUNG}" == "thm" ] ; then
# ZEITSTEMPEL NNAME _datei VERZEICHNIS DATUM ZIEL VNAME
UMBENENNEN
#
### hier muss auch die Video-Datei bearbeitet werden
bdatei="$(echo "${_datei}" | sed -e 's/[.]thm$//;s/[.]THM$//')"
OENDUNG="$(ls ${bdatei}.* | rev | awk -F'.' '{print $0}' | rev | egrep -iv 'thm$' | head -n1 | awk -F'.' '{print $NF}')"
NENDUNG="$(echo "${OENDUNG}" | awk '{print tolower($0)}')"
_datei="$(echo "${bdatei}.${OENDUNG}")"
NNAME="$(echo "${BNAME}" | awk -F'.' '{print tolower($1)}').${NENDUNG}"
UMBENENNEN
else
### alle anderen
UMBENENNEN
fi
fi
done
/home/http/wiki/data/pages/dateinamen_und_verzeichnisnamen_automatisiert_aendern.txt · Zuletzt geändert: von 127.0.0.1
