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…
ᦿ