Trouver les fichiers avec un pathname ou un filename long

J’utilise Syncthing pour synchroniser mes postes et je me suis retrouvé avec des erreurs sur mes postes Xubuntu, en cause des noms de fichiers trop longs (dépassant 143 caractères) rendant impossible la synchronisation. En gros j’ai un nom de fichier très long sur Windows mais impossible à synchroniser sur Xubuntu. Ce souci est lié à eCryptfs dont j’ai parlé dans l’article précédent, mon dossier Sync étant dans mon /home/babar.

Il a fallu trouver une solution et elle est simple, il faut supprimer les fichiers ou les renommer. Mais comment retrouver ces fichiers ?

find /home/babar/Sync | awk '{print length,$0}' | sort -rn | head -n 10 # Afficher les 10 chemins de fichiers (pathname) les plus longs du répertoire /home/babar/Sync (utile sur les serveurs de fichiers)
find /home/babar/Sync -regextype posix-egrep -regex '.{160,}' # Afficher les chemins de fichiers (pathname) plus long que 160 caractères
find /home/babar/Sync -regextype posix-egrep -regex ".*[^/]{80}" # Afficher les noms des fichiers (filename) plus long que 80 caractères
find /home/babar/Sync -regextype posix-egrep -regex ".*[^/]{n}" -print0 | xargs -0 rm # Afficher les noms des fichiers (filename) plus long que n caractères (j'ai donc mis 143) puis les supprimer
printf "/home/babar/Sync/Mon beau fichier.txt" | wc -m # Compter le nombre de caractères du chemin du fichier (pathname)
printf "Mon beau fichier.txt" | wc -m # Compter le nombre de caractères du nom du fichier (filename)

Vous remarquerez que j’ai utilisé printf plutôt que echo. De manière générale il faut privilégier printf à echo, deux articles à ce sujet (1, 2). Je vous invite à faire echo abc | wc -m, vous allez avoir comme résultat 4. Si vous faites printf abc | wc -m , vous obtiendrez 3.

Source : http://unix.stackexchange.com/questions/61197/command-to-find-file-path-lengths-that-are-too-long-for-burning-to-dvd
http://askubuntu.com/questions/361976/find-files-with-a-minimum-filename-length
http://superuser.com/questions/411133/how-to-use-command-find-to-list-files-with-specific-filename-length
https://www.gnu.org/software/findutils/manual/html_node/find_html/Regular-Expressions.html

Vus : 542
Publié par blog-libre : 133