Gostaria de responder a uma questão que pode ter sido discutida anteriormente ou abordada indiretamente através de outras questões.
Estou precisando de uma solução para mover arquivos recorrentemente com uma extensão especÃfica de uma pasta para outra. Porém, devido ao processo de extração automatizado, é fundamental que o script possa identificar e ignorar arquivos que não foram completamente extraÃdos.
Já desenvolvi um script preliminar e testei-o com o crontab. Agora, procuro aprimorá-lo incorporando as seguintes funcionalidades:
- Especificando o tratamento de arquivos com uma extensão especÃfica
- Implementando um mecanismo para ignorar arquivos extraÃdos de forma incompleta
Melhor Lucas
Após a primeira resposta, fiz esse script. Os arquivos antes da extração são .rar (também dividido em .part), mas com esse script quase resolvi tudo
#!/bin/bash
# Source folder
source_folder="-----"
# Destination folder
destination_folder="-----"
# File extension to be moved file_extension="-----"
# Iteration through the files with the specified extension
for file in "$source_folder"/*"$file_extension"; do
# Check if the file is open
if ! lsof "$file" >/dev/null 2>&1; then
# move the file
mv "$file" "$destination_folder"
fi
done
Você pode usar um utilitário como
fuser
oulsof
para descobrir se um processo está gravando no arquivo. Isso só é útil se os arquivos forem extraÃdos por um processo no mesmo host e se esse processo tiver continuamente o arquivo aberto para gravação.O que fazer se o processo de extração falhar ou for abortado (por exemplo, devido à reinicialização do sistema)? O que você deseja fazer com um arquivo extraÃdo de forma incompleta que não está sendo extraÃdo ativamente?
Você consegue reconhecer o final de um arquivo completamente extraÃdo? Se você puder, eu usaria isso como seu critério. Dependendo do formato do arquivo, eu usaria
awk
ouperl
parapython
detectar o final do arquivo. (Se estiver em um formato estruturado, como JSON, você deseja usar uma biblioteca para analisá-lo; essas bibliotecas estão prontamente disponÃveis para Perl e Python.)Depois de ter um script, digamos
is-complete
, que decide se um arquivo está completo ou não (retornando o código de saÃda 0 para sucesso e qualquer outro número para falha), você pode mover os arquivos em um único comando: