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.