Estou tentando renomear recursivamente todas as pastas _Oreilly
(correspondência exata) para_OreillyFox
Em outras palavras, estou tentando ter o mesmo efeito que:
find . -depth -type d -name "_Oreilly" -execdir rename "s/_Oreilly/_OreillyFox/" {} \;
Usando zmv
.
O comando que estou tentando é:
zmv -n '(**/)_Oreilly' '${1}_OreillyFox'
Tentei o comando acima com o nome do arquivo e ele os renomeia. Quero renomear apenas diretórios.
Em
zmv
, os qualificadores glob devem ser especificados por padrão usando a(#q<qualifiers>)
sintaxe glob estendida. A(<qualifiers>)
sintaxe mais curta "qualificador glob puro" é desabilitada por padrão, pois o uso do(...)
operador de agrupamento glob é amplamente utilizado em ,zmv
mesmo para itens que não contêm|
(o que os diferencia dos qualificadores glob puros), a menos que você passe a-Q
opção que os restaura.Então, você precisa:
Ou:
(onde
/
está o qualificador para selecionar arquivos do tipo diretório ; altere para-/
para que essa verificação seja feita após a resolução do link simbólico (comofind
o do GNU-xtype d
) ou IOW para também renomear links simbólicos para diretórios).Ou, como observado por @steeldriver em sua resposta agora excluída, apenas:
Confiando no fato de que o caminho completo está armazenado em
$f
.Observe que ele
zmv
faz a travessia em profundidade por padrão, você não precisa solicitá-la explicitamente com ood
qualificador.Ao contrário de
find
, ele ignora arquivos e diretórios ocultos por padrão; adicione oD
qualificador se você também quiser renomear esses diretórios caso eles sejam encontrados dentro de hierarquias de diretórios ocultos.Sim, eu poderia reproduzi-lo com um pequeno ajuste para encontrar:
E seu comando zmv (sem -n. Isso é um teste)
Ambos os métodos funcionaram para mim, com zsh no Ubuntu.