0 votes

Modifier l'horodatage d'un fichier (photos, vidéos) à partir du nom du fichier

Lorsque vous déplacez des fichiers entre différents répertoires et entre PC et smartphones, l'horodatage de la date de dernière modification est généralement réinitialisé à la date même de l'opération de déplacement ou de copie. Cela conduit à des fichiers qui ne sont pas triés chronologiquement dans certaines applications (Galerie), ce qui est assez ennuyeux, surtout pour les images et les vidéos.

Habituellement, ce type de fichiers suit la convention de dénomination IMG_YYYYMMDD_HHMMSS.jpg pour les images et VID_YYYMMDD_HHMMSS.mp4 pour les vidéos. J'ai donc pensé à combiner touch et d'extraire le caractère des noms de fichiers, l'horodatage faisant en fait partie du nom de fichier lui-même.

J'ai trouvé ce script à Le QG d'Ephestione for i in IMG*.jpg; do busybox touch -t ${i:4:8}${i:13:4}.${i:17:2} $i; done mais ne fonctionne que dans le terminal. J'ai essayé d'en faire un script mais cela ne fonctionne pas (voir ci-dessous).

#!/system/bin/sh
#change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg 
for i in IMG_*.jpg
do
    touch -t ${i:4:8}${i:13:4}.${i:17:2} $i
done

#change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg
for i in IMG-*WA*.jpg
do
    touch -t ${i:4:8}1234 $i
done

#change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4
for i in VID_*.jpg
do
    touch -t ${i:4:8}${i:13:4}.${i:17:2} $i
done

#change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4
for i in VID-*WA*.mp4
do
    touch -t ${i:4:8}1234 $i
done

Idéalement, j'aimerais placer un script comme celui-ci dans le répertoire de premier niveau DCIM ou Pictures et le faire traiter toutes les images et vidéos dans les sous-répertoires. Bien sûr, je suis enraciné.

1voto

Reddy Lutonadio Points 6225

Supprimez du script le .${i:17:2} en boucle.

Il devrait l'être :

#!/system/bin/sh
#change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg 
for i in IMG_*.jpg
do
    touch -t ${i:4:8}${i:13:4} $i
done

#change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg
for i in IMG-*WA*.jpg
do
    touch -t ${i:4:8}1234 $i
done

#change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4
for i in VID_*.jpg
do
    touch -t ${i:4:8}${i:13:4} $i
done

#change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4
for i in VID-*WA*.mp4
do
    touch -t ${i:4:8}1234 $i
done

Notez que les images et les vidéos de WhatsApp selon votre script ont la même heure 12:34.

Edit : Pour passer également par les sous-répertoires, changez les boucles for comme suit :

for i in `find . -type f -name "IMG_*..jpg"`
do

j=`basename $i` 

echo $j

touch -t ${j:4:8}${j:13:4} $i

done

Explication :

trouver . -type f -name " .mp5"` : recherche les fichiers ( -type t) dont le nom contient " IMG_". .jpg" ( -name "IMG_*.jpg") dans le répertoire courant ( . ) et ses sous-répertoires.

j= basename $i : Récupérer le nom du fichier (pas le chemin complet), et l'affecter à j.

touch -t ${j:4:8}${j:13:4} $i : Modifier l'heure de modification du fichier en fonction de la date et de l'heure récupérées dans ${j:4:8}${j:13:4} .

0 votes

Oui, 1234 est une date fictive. Le script semble fonctionner même s'il stderrs un touch : invalid date

0 votes

Pourquoi ne pas le faire fonctionner avec des sous-dossiers ?

0 votes

Je modifierai le script lorsque j'aurai le temps de parcourir les sous-répertoires.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X