Se o seu arquivo for salvo como $FILENAME , todos darão o 4º diretório. Nestes exemplos, estou configurando manualmente
FILENAME="/media/data/temp1/Joe Jackson - The Ultimate Collection/CD2/Jumpin' Jive Live - Joe Jackson.mp3"
-
Use o shell:
$ dir=${FILENAME#*/*/*/*/}; echo ${dir//\/*} Joe Jackson - The Ultimate CollectionAqui, primeiro removo as primeiras quatro barras, deixando o quarto diretório e o nome do arquivo e, em seguida, removendo o nome do arquivo.
-
Shell e
basename:$ dir=${FILENAME#*/*/*/*/}; basename "$dir" Jumpin' Jive Live - Joe Jackson.mp3A mesma ideia acima, apenas usando
basenamepara a etapa final. -
Analise com Perl:
$ echo "$ FILENAME" | perl -pe 's # (. ? /) {4} (. ?) /.*#$ 2 #' Joe Jackson - The Ultimate Collection
A expressão regular corresponde a 4 repetições de 0 ou mais caracteres seguidos por uma barra, depois tudo para a próxima barra e depois para todo o resto. Os parênteses permitem que você capture um padrão correspondente, então estamos substituindo tudo pelo segundo padrão criado, o nome do diretório.
Como alternativa, você pode dividir a linha em um array em slases e imprimir o 5º campo (5 porque o primeiro está vazio devido ao
/no início da variável):$ echo "$FILENAME" | perl -F"/" -lane 'print $F[4]' Joe Jackson - The Ultimate Collection -
Analise com
awk:$ echo "$FILENAME" | awk -F"/" '{print $5}' Joe Jackson - The Ultimate CollectionMesma ideia, mas em
awk.