renomeia apenas o último diretório da árvore

0

O comando abaixo em unix renomeará todo o diretório com o nome Utility to Claim , quando executado a partir do nível superior

 find . -type d -name Utility -exec sh -c 'mv "${0}" "${0%/Utility}/Claim"' {} \;

No entanto, quero apenas renomear o diretório no último nível de Utility , não todos. Exemplo se a estrutura for /Sample/Utility/version1/Utility/test.txt , quero renomear apenas a última pasta Utility , quando executada a partir do nível superior.

    
por Suresh 05.12.2014 / 13:09

1 resposta

1

Esta é minha sugestão:

find . -type d -name Utility -print | sort -r | awk '{if(substr(p,1,length($0))!=$0) print $0; p=$0}' | while read i; do echo mv "${i}" "${i%Utility}Claim"; done

find é usado para localizar todo o diretório chamado Utility na pasta atual e imprimir os nomes encontrados.
Os nomes são classificados em ordem inversa.
awk imprime apenas as linhas (nomes) que não são um prefixo da linha anterior (nome). Este é o passo que, por exemplo, remove "/ Sample / Utility" quando encontrado após "/ Sample / Utility / version1 / Utility". As linhas são lidas em um loop de shell e depois eu imprimo os comandos mv que você deseja. Remova o "echo" para fazer o mv s.

    
por 05.12.2014 / 14:56

Tags