move arquivos baseados em padrão com zsh / zmv

3

Como posso mover arquivos para subdiretórios com base na parte comum de seus nomes?

Por exemplo, com arquivos nomeados como comment_LastName.pdf e comment_LastName.md e subdiretórios nomeados como FirstName_LastName/ , em que todos os FirstName e LastName variam, como faço para mover arquivos comment_X.pdf para o subdiretório Mister_X/ ? (mas para todos os arquivos / diretórios de uma só vez)

Aqui está uma tentativa sem sucesso com zmv , mas não consigo descobrir o comando adequado ...

zmv -n 'comment_(*).(pdf|md)' '*_$1/$f'

    
por meriops 30.11.2015 / 14:54

1 resposta

3

Parece que o operando de destino do zmv é citado se você introduzir referências anteriores, como $1 e $f , portanto, não é possível incluir globbing nesse caso. A melhor opção que encontrei para resolver esse problema foi usar o -p flag e dar zmv uma função mv definida.

Isso é o que eu criei:

mv2 () {
    local dir
    dir=(*_$3:h) 
    mv $1 $2 $dir[1]/$3:t
}
zmv -p mv2 'comment_(*).(pdf|md)' '$1/$f'

Na função mv2 , criamos uma matriz dos diretórios nos quais você deseja colocar os arquivos. Em seguida, no comando mv real, marcamos os nomes dos arquivos nos componentes da matriz de diretórios. Globbing para os diretórios de destino deve ser separado, uma vez que esses arquivos ainda não existem. O globbing falharia de outra forma.

    
por 30.11.2015 / 21:05

Tags