Tenho milhões de arquivos com a seguinte nomenclatura em uma máquina Linux:
1559704165_a1ac6f55fef555ee.jpg
Os primeiros 10 dígitos são timestamp e os seguidos por um _
são ids específicos. Quero mover todos os arquivos que correspondem a IDs de nome de arquivo específicos para uma pasta diferente.
Eu tentei isso no diretório com arquivos
find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
No entanto, estou recebendo um erro indicando:
bash 1559704165_a1ac6f55fef555ee.jpg: command not found
Quando tentei, mv ??????????_a1ac*.jpg
estou recebendo um erro muito longo na lista de argumentos. Eu tenho pelo menos 15 padrões de nome de arquivo diferentes. Como faço para movê-los.
Você deveria usar:
Então
maxdepth 1
significa que você deseja pesquisar no diretório atual sem subdiretórios.type f
significa encontrar apenas arquivos.name '??????????_a1ac*.jpg'
é um padrão que corresponde ao arquivo que você está procurando.mv -t destination "{}" +
significa mover os arquivos correspondentes para o destino. Aqui+
adiciona novos arquivos correspondentes ao anterior, como:Aqui abcd são arquivos diferentes.
Seu comando,
Encaminha a lista de todos os arquivos PARA todos os arquivos!
vai fazer o truque.
Você está muito perto. Você deve usar a
-name
opção parafind
. E lembre-se de citar o padrão.Então
Não tão "bom" quanto as
find
soluções, mas outra solução válida é tornar osmv
comandos mais granulares.Isso faz 4096 movimentos, com um número menor de arquivos movidos por
mv
operação.Se você deseja mover arquivos no mesmo sistema host, o que acho que está fazendo com o seu
mv
,rsync
pode ser uma opção mais rápida:--inplace
e-W
estão configurados para acelerar o processo.Se isso gerar outro erro de lista de argumentos muito longo , você poderá alimentar listas para
rsync
Faça a lista com find, por exemplo
e dar-lhe
rsync
A fonte aqui é
/path/to/files
, porquersync
tratará a lista que você fornecer como relativa à sua fonte.O ponto é:
rsync
é mais rápido quemv
, se os arquivos não estiverem no mesmo sistema de arquivos .