Como posso mover todos os arquivos correspondentes a um padrão para uma pasta?

1
ls | grep 'NC022.*nii'

Mostra todos os arquivos que contêm NC022 e nii .

Mas quando tento movê-los usando

mv NC022.*nii NC022/

Ele reclama que

mv: cannot stat 'NC022.*nii': No such file or directory

Isso também acontece se eu tentar isso (como visto em outras respostas).

mv -t NC022 'ls | grep 'NC022.*nii''

Estou lutando para ver qual é o erro, pois tenho a sensação de ter feito exatamente a mesma coisa várias vezes sem erros ...

Como posso mover todos os arquivos correspondentes a um padrão para uma pasta?

Exemplo de saída parcial de ls para o primeiro comando:

NC022_Background1_Raw import  W325.39 L290.nii
NC022_Background2_Copy (2) of Raw import  W325.39 L290.nii
NC022_Background3_Raw import  W1103.50 L551.nii
NC022_Mask1_mask_air.nii
    
por hirschme 24.04.2018 / 23:54

1 resposta

4

Você está confundindo a sintaxe da expressão regular (como usada por grep ) com padrões glob (usados pelo shell).

Na regex, . significa qualquer caractere único e * significa zero ou mais repetições. Então, grep 'NC022.*nii' corresponde NC022 a nii com qualquer coisa (incluindo nada) entre eles.

Por outro lado, . é literal em globs de shell, enquanto * significa zero ou mais caracteres. Então, NC022.*nii corresponde NC022. a nii com qualquer coisa (incluindo nada) entre eles.

Em particular, se você estiver tentando corresponder todos os arquivos com .nii extensão , o . está no lugar errado: você deseja NC022*.nii , ou seja,

mv NC022*.nii NC022/
    
por steeldriver 25.04.2018 / 01:55