cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

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
    

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog