Retour au blog
janv. 2022·1 min de lectureTraduit par IA
Langue:DeutschEnglishFrançaisÖsterreichischKlingonian Version originale: Deutsch

Renommer et copier automatiquement les photos GoPro

#bash#dateinamen#gopro#ordnung#sortierung

Il existe une version plus récente et meilleure ici : Autosort - Trier simplement et rapidement images et vidéos

Ah oui, le sujet pénible des « noms de fichiers GoPro ». Les noms de fichiers ressemblent à un joyeux fouillis et l'on ne peut rien y associer. Que faire ?

Pas d'inquiétude : il existe une solution sous la forme d'un script Bash.

Que fait-il ? En gros, le script vérifie des emplacements définis à la recherche de vidéos GoPro / photos d'appareil (oui, cela fonctionne donc aussi pour les photographes). Lorsque des fichiers sont trouvés, un sous-dossier au format AAAA-MM-JJ est créé et les fichiers y sont copiés selon le schéma AAAA-MM-JJ-HH-mm-ss.ext. Une vidéo MP4 que vous avez enregistrée le 30.01.2022 à 14:44:12 sera donc enregistrée ici :

/Volumes/Videos/Videos/2022-01-30/2022-01-30-14-44-12.mp4

Si la copie a réussi (vérifié à l'aide d'une valeur de hachage), l'original est supprimé.

Vous n'avez qu'à adapter les chemins suivants :

  • video_target = Les vidéos sont copiées ici
  • foto_target = Les photos sont copiées ici
  • video_sources = Ces dossiers sont analysés à la recherche de vidéos
  • foto_sources = Ces dossiers sont analysés à la recherche de photos
#!/bin/sh
video_target="/Volumes/Videos/Videos/"
foto_target="/Volumes/Extern01/Fotos/"
video_sources=("/Volumes/Untitled/MP_ROOT" "/Volumes/GoPro/DCIM/100GOPRO")
foto_sources=("/Volumes/Untitled/DCIM/100MSDCF" "/Volumes/Untitled/private/AVCHD/BDMV/STREAM")
# FIRST PARAMETER: 0 = KEEP FILE NAME / 1 = RENAME TO DATETIME NAME
docopy(){
num_files=`ls -1q "$1" | wc -l`
filecount=0
for file in $1/*; do
    filecount=$((filecount+1))
    echo "File/Folder #$filecount of $num_files"
    if [[ -d ${file} ]]
    then
      echo "$file is Directory. Check it's subdirectories."
      docopy "$file" $2 $3
    fi
    if [ ! -f "$file" ]; then
        echo "$file does not contain any files. Next."
        continue
    fi
    original_folder_name=`stat -f "%Sm" -t "%Y-%m-%d" "$file"`
    original_file_datetime=`stat -f "%Sm" -t "%Y-%m-%d-%H-%M-%S" "$file"`
    target_path="$2${original_folder_name}/"
    original_file_name=$(basename ${file})
    target_file="$target_path/$original_file_name"
    original_file_extension="${original_file_name##*.}"
    echo "Source: ${file}"
    echo "Destination: ${target_path}"
    echo "Copying..."
    if [ -f "$file" ] && [ -f "$target_path" ];
    then
      md5SrcFile=$(md5 -q "$file")
      md5DstFile=$(md5 -q "$target_file")
      if [ "$md5SrcFile" == "$md5DstFile" ]; then
    echo "The file ${target_path} already exists with MD5 Matching. Skip?"
    read -p "Y to Skip, C to Continue " skip
      fi
    if [ "$skip" == "Y" ]; then
      continue
    fi
    fi
    mkdir -p "${target_path}"
    md5SrcFile=$(md5 -q "$file")
    rsync -ct ${file} ${target_path}
    md5DstFile=$(md5 -q "$target_file")
    if [ "$md5SrcFile" == "$md5DstFile" ] && [ "$md5SrcFile" != "" ] && [ "$md5DstFile" != "" ];
    then
      rm ${file}
    else
      echo "ERROR: MD5 MISMATCH"
      exit
    fi
    if [ $3 -eq 1 ]
    then
    incrementor=0
    renamed_file="$target_path$original_file_datetime.$original_file_extension"
    if [ -f "$renamed_file" ]; then
      incrementor=$((incrementor+1))
      renamed_file="$target_path$original_file_datetime.$incrementor.$original_file_extension"
    fi
      mv $target_file $renamed_file
    fi
    echo "Done"
    echo "___"
  done
}
echo "Scanning default folders."
for i in "${video_sources[@]}"; do
  if [ -d "$i" ] && [ -d $video_target ]; then
    docopy "$i" $video_target  1
  fi
done
for i in "${foto_sources[@]}"; do
  if [ -d "$i" ] && [ -d $foto_target ]; then
    docopy "$i" $foto_target  0
  fi
done
read -p "Do you want to copy files from an individual path? Press Y or N: " tmp
if [ "$tmp" = "Y" ]; then
  read -p "Enter Videos or Photos: " medium
  read -p "Enter Source path: " src
  if [ "$medium" == "Videos" ] && [ -d "$src" ] && [ -d $video_target ]; then
    docopy "$src" $video_target  1
  fi
  if [ "$medium" == "Photos" ] && [ -d "$src" ] && [ -d $foto_target ]; then
    docopy "$src" $foto_target  0
  fi
fi
echo "Finished"
Plus récentClosures JavaScriptPlus ancienDelegates C#