Estou tentando incorporar o comando 'mv' em um dockerfile.
Quero mover apenas os arquivos com determinada extensão, mas sem uma string no nome.
Suponha que o diretório src tenha abc.txt, abcu.txt, def.xml, 1abc2.txt, mno.txt, pqr.txt e eu queira mover apenas arquivos .txt e não tenha 'abc' em seu nome. Portanto, apenas mno.txt e pqr.txt devem ser movidos.
Qual seria a melhor maneira de fazer isso?
Com globbing de shell estendido:
Com
find
:Avisos :
echo
é adicionado na frentemv
dos dois exemplos acima para um teste seguro ... Você precisa removê-lo quando estiver satisfeito com a saída para que a movimentação real aconteça.-t
opçãomv
especifica o diretório de destino/destino e espera um argumento depois dele na forma de um caminho como-t /path/to/dest
.--
e diretamente antes do padrão glob comomv -nv -t /path/to/dest -- /path/to/source/!(*abc*).txt
… Enquanto no segundo exemplo, isso pode ser feito assimfind /path/to/source/ ! -name "*abc*" -name "*.txt" -exec echo mv -nv -t /path/to/dest -- {} +
.mv
comando está sujeito ao comprimento/tamanho máximo de argumentos do sistema permitido para um comando e embora deva ser bastante grande no Ubuntu (da última vez que verifiquei, era em torno de 2 MB ), mas você precisa saber disso de qualquer maneira… O segundo exemplo comfind
, entretanto, não é afetado por esta restrição.