cClaude.rocks ☕ Le blog

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

Menu

La synchronisation de dossiers ou de fichiers commençant par un caractère espace ne fonctionne pas avec l’application Nextcloud de bureau. Une erreur est affichée, mais beaucoup trop discrètement.

De manière générale, ce n’est pas une bonne idée que d’avoir des espaces dans un nom de fichier (et ce quel que soit le système), mais c’est encore plus problématique lorsque il existe un espace en début ou en fin de nom.



Le client Nextcloud à une interface graphique douteuse et la plupart des alertes sont soit illisibles car trop nombreuses, soit invisibles car noyer dans la masse des messages.

Trouver les fichiers ou les dossiers qui commencent ou finissent par un espace

Pour trouver tous les fichiers et les dossiers existant sur votre compte, depuis un terminal (Ctrl + Alt + T) vous pouvez utiliser la commande :

find "${HOME}" '(' -name ' *' -or -name '* ' ')'


Une solution simple pour utilisateur

Voici une base avec une interface graphique partielle, basée sur zenity :

function trim {
  sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//'
}

function remove_space {
  local -r file="$1"

  local dir=
  dir="$( dirname "${file}" )"

  local oldname=
  oldname="$( basename "${file}" )"

  local newname=
  newname="$( trim <<<"${oldname}" )"

  pushd "${dir}" >/dev/null || return $?

  if [ -f "${newname}" ] ; then
    zenity --notification --window-icon="info" --text="Le fichier existe déjà : '${newname}' (Ignoré)"
    return 0
  fi

  (
    [ "${DEBUG:-}" = 'true' ] && set -x
    mv --no-clobber "${oldname}" "${newname}" || return $?
  ) || return $?
  popd >/dev/null || return $?
}

function show_files_starting_or_ending_with_space {
  local -r dirname="${1:-${HOME}}"
  local -a entries=()
  local -i index=0

  if [ ! -d "${dirname}" ] ; then
    zenity --error --text="Dossier non trouvé '${dirname}'"
    return 1
  fi

  declare -gr __title__='Nom de fichiers (dossier) commençant ou finissant par un espace'
  declare -gr __message__='Choisissez les fichiers (dossier) à renommer'

  zenity --notification --window-icon="info" --text="Analyse en cours…"

  local file=
  while read -r file ; do
    entries+=( "${index}" )
    entries+=( "${file}" )
    entries+=( "${file}" )
    ((index++))
  done < <( find "${dirname}" '(' -name ' *' -or -name '* ' ')' -print )

  local -a zen_opts=()
  zen_opts+=(--list)
  zen_opts+=(--title="${__title__}")
  zen_opts+=(--text="${__message__}")
  zen_opts+=(--checklist)
  zen_opts+=(--separator='\n')
  zen_opts+=(--hide-header)
  zen_opts+=(--column='')
  zen_opts+=(--column='ID' )
  zen_opts+=(--column='')
  zen_opts+=(--hide-column=2)

  local answer=
  answer="$(
    [ "${DEBUG:-}" = 'true' ] && set -x
    zenity "${zen_opts[@]}" "${entries[@]}"
  )" || return $?

  while read -r file ; do
    if [ -n "${file}" ] ; then
      remove_space "${file}" || return $?
    fi
  done <<<"${answer}"
}

L’usage de base qui traite tout le dossier $HOME de l’utilisateur courant :

show_files_starting_or_ending_with_space

Pour limiter l’analyse à un dossier donné :

show_files_starting_or_ending_with_space "${HOME}/Nextcloud"

Pour ajouter un quelques messages pour analyser certains problèmes :

DEBUG=true show_files_starting_or_ending_with_space "${HOME}/Nextcloud"


Liens

Pas de lien…

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog