lp="folder_very_very_long_name/folder_very_very_long_name/folder_very_very_long_name/file_very_very_long_name"
IFS='/' read -a components <<< "$lp"
combined_path=""
for comp in "${!components[@]}"
do
if [ ${#components[$comp]} -gt 0 ]; then
a=$(echo ${components[$comp]} | cut -c -5);
b=$(echo ${components[$comp]} | tail -r -c 6);
if [ $comp -eq 0 ]; then
combined_path="$a...$b"
else
combined_path="$combined_path/$a...$b"
fi
fi
done
echo $combined_path
Exemplo de saída:
folde..._name/folde..._name/folde..._name/file_..._name
Explicação:
IFS
é seu delimitador; você lê em lp
e armazena cada parte de sua string dividida no array components
.
Em seguida, você itera sobre cada elemento em sua matriz, usando a instrução if para verificar se o respectivo comp
está vazio, indicando um caminho começando na raiz. Usando cut
, você obtém os 5 primeiros caracteres e usa tail
o último 5. Em seguida, anexe-o ao seu caminho geral combined_path
, concatenando a
e b
com ...
entre os dois. (Isso é apenas para tornar o encurtamento mais visível e pode ser facilmente deixado de fora).
Espero que isso ajude você a se aproximar da solução desejada.