CentOS 5.x
Peço desculpas se esta é uma pergunta repetida. Já vi muitas perguntas semelhantes (sobre a exclusão de arquivos), mas não exatamente o mesmo cenário.
Eu tenho um diretório contendo centenas de milhares de arquivos (possivelmente mais de um milhão) e, como uma correção de curto prazo para um problema diferente, preciso mover esses arquivos para outro local.
Para fins de discussão, digamos que esses arquivos residam originalmente /home/foo/bulk/
e desejo movê-los para/home/foo2/bulk2/
Se eu tentar mv /home/foo/bulk/* /home/foo2/bulk2/
, recebo um erro "muitos argumentos".
O Sr. Google me disse que uma alternativa para excluir arquivos em massa seria executar o find. Algo como: find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm
Seria bom se eu estivesse excluindo coisas, mas, neste caso, quero mover os arquivos ... Se eu digitar algo como find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/
bash, reclama que o arquivo não é um diretório.
Qual é o melhor comando a ser usado aqui para mover os arquivos em massa de um diretório para outro?
Considerando
mv
o diretório pai em vez dos arquivos:(Mas pode causar problemas, se
/home/foo/bulk
necessário, a cada momento.)fonte
mkdir
? E o dir "existindo a todo momento" ou não? Por que isso aceleraria as coisas?mkdir
é porque a pasta inteira e tudo dentro dele seria movido para o outro diretório e já não existem no diretório antigo. Ele garante que o diretório antigo ainda exista. No entanto, isso não seria suficiente se houvesse um serviço em execução constante que dependesse do primeiro diretório sempre existente, porque ele é movido e recriado. Não torna nada mais rápido, apenas mais simples, fornecendo menos argumentos.Só por variedade, gosto de usar o cpio em alguns casos como este.
fonte
-print0
e-0
opções.Com o GNU
mv
:Em sistemas como o OS X que não possuem,
mv -t
mas possuem-print0
exargs -0
:Ou se os nomes dos arquivos não contiverem espaços, aspas, barras invertidas ou novas linhas (com OS X
xargs
) ou aspas, barras invertidas ou novas linhas (com GNUxargs
):fonte
Por um tempo especificado, tente o seguinte:
fonte