Windows et les outils fonctionnant sur des serveurs Windows (par exemple, OneDrive) ont une limite de longueur de chemin.
Je recherche un outil de ligne de commande sous OSX / Linux / Unix pour, dans un répertoire, raccourcir tous les chemins dépassant un seuil, par exemple, en conservant les 5 premiers caractères et les 5 derniers caractères de chaque nom de dossier / fichier. des chemins trop longs, commençant par les noms des dossiers et des fichiers les plus éloignés de la racine (c'est-à-dire les plus imbriqués).
c'est à dire
folder_very_very_long_name/folder_very_very_long_name/folder_very_very_long_name/file_very_very_long_name
pourrait devenir
folder_very_very_long_name/folder_very_very_long_name/folde_name/file__name
Je peux déjà identifier les chemins gênants en utilisant:
find . -name \* -type f | perl -ne 's/(.*)/print length($1), " $1\n"/e' | sort -nu
de:
folder_very_very_long_name/folder_very_very_long_name/folde_name/file__name
existe déjà?Réponses:
Exemple de sortie:
Explication:
IFS
est votre délimiteur; vous lisezlp
et stockez chaque partie de votre chaîne fractionnée dans le tableaucomponents
.Ensuite, vous parcourez chaque élément de votre tableau en utilisant l'instruction if pour vérifier si l'élément respectif
comp
est vide, indiquant ainsi un chemin commençant à la racine. L' utilisation quecut
vous obtenez les 5 premiers caractères et en utilisanttail
la dernière 5. vous ajoutez ensuite que sur votre chemin ensemblecombined_path
, concaténera
etb
avec...
entre les deux. (C'est juste pour rendre le raccourcissement plus visible et peut facilement être laissé de côté).J'espère que cela vous aidera à vous rapprocher de la solution souhaitée.
la source