Les fichiers .nomedia
servent sur Android Ă ne pas ajouter les mĂ©dias (photos ou vidĂ©os) contenu dans le dossier dans la galerie du tĂ©lĂ©phone. Attention, il ne sâagit pas des fichiers finissant par .nomedia
mais bien du fichier unique par répertoire se nommant .nomedia
.
Le contenu du fichier nâa pas dâimportance, il peut ĂȘtre vide, seule sa prĂ©sence compte.
La problématique
Si ces fichiers sont laissĂ©s vides, les applications de nettoyage peuvent-ĂȘtre amenĂ© Ă les supprimer (que ce soit parce quâils sont vides ou que de fait se sont des fichiers identiques).
Tant que lâon reste sur la plateforme Android ce nâest pas vraiment un problĂšme (les applications de nettoyage sont parfaitement au fait de la rĂšgle), mais lorsquâon synchronise avec son ordinateur (par exemple Ă lâaide de Nextcloud) cela est diffĂ©rent. Certaines applications de recherche de doublons ou de nettoyage des fichiers vides seront peut-ĂȘtre moins au fait de cette rĂšgle.
Certaines applications sur Android génÚrent les fichiers .nomedia
en mettant dĂ©jĂ le nom du rĂ©pertoire courant (qui doit ĂȘtre cachĂ©). Le chemin utilisĂ© pour alimenter le fichier est souvent dans ce cas le chemin absolu du rĂ©pertoire.
Je vous propose donc un petit script qui va se charge de faire ce travail. On va donc vérifier que chaque fichier .nomedia
qui existe contienne le chemin du dossier oĂč se trouve fichier .nomedia
.
Une version simpliste :
find ~/Nextcloud -type f -name .nomedia -empty -print | while read -r FILENAME ; do echo "$( dirname "${FILENAME}" )" >"${FILENAME}" ; done
Ici on ne recherche que les fichiers .nomedia
vide et on met le nom du rĂ©pertoire (nom absolu du dossier sur lâordinateur).
On peut améliorer un peu ce code en utilisant une fonction et en ajoutant une trace des fichiers modifiés.
function fill_nomedia_files {
local -r _dir_="$1"
find "${_dir_}" -type f -name .nomedia -empty -print | while read -r FILENAME ; do
echo "${FILENAME}"
echo "$( dirname "${FILENAME}" )" >"${FILENAME}"
done
}
Qui sâutilisera par exemple :
fill_nomedia_files ~/Nextcloud
-
Version un peu plus aboutie
function fill_nomedia_files { local -r _dir_="$1" if [ -n "${FILL_NOMEDIA_PREFIX:-}" ] ; then local content_prefix="${FILL_NOMEDIA_PREFIX}" else local content_prefix= fi if [ "${FILL_NOMEDIA_MODE:-}" != 'LOCAL' ] ; then cd "${_dir_}" || return $? local file_prefix= else local file_prefix="${_dir_}" fi local __filename__= local _filename_= local _content_= local _expected_= find "${_dir_}" -type f -name '.nomedia' -printf '%P\n' | while read -r __filename__ ; do _filename_="${file_prefix}${__filename__}" _expected_="$( echo "${content_prefix}$( dirname "${__filename__}" )" )" _content_="$( cat "${_filename_}" )" || return $? if [ "${_expected_}" = "${_content_}" ] ; then echo "OK: ${_filename_}" else if [ "${FILL_NOMEDIA_DEBUG:-}" = 'true' ] ; then echo "UPDATE: '${_filename_}' using '${_expected_}'" cat <<EOF FOUND: [${_content_}] --- EOF else echo "UPDATE: '${_filename_}'" fi if [ "${FILL_NOMEDIA_DRY_RUN:-}" != 'true' ] ; then echo -n "${_expected_}" >"${_filename_}" fi fi done }
Si vous définissez la variable
FILL_NOMEDIA_PREFIX
sont contenu sera ajouté pour préfixer le nom de dossier mis dans le fichier.nomedia
.FILL_NOMEDIA_PREFIX='/storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/user@drive.cclaude.rocks/'
Si vous définissez la variable
FILL_NOMEDIA_MODE
avec la valeur 'LOCAL', le nom complet du rĂ©pertoire sur lâordinateur sera utilisĂ© comme nom du dossier mis dans le fichier.nomedia
.FILL_NOMEDIA_MODE='LOCAL'
Si vous définissez la variable
FILL_NOMEDIA_DEBUG
avec la valeur 'true', des traces supplémentaires seront affichées.FILL_NOMEDIA_DEBUG='true'
Si vous définissez la variable
FILL_NOMEDIA_DRY_RUN
avec la valeur 'true', le script se déroulera sans alimenter les fichiers.nomedia
mais expliquera ce quâil va faire si une autre valeur est dĂ©finie.FILL_NOMEDIA_DRY_RUN='true'
Ce script sâutilisera comme suit :
fill_nomedia_files ~/Nextcloud
኿