Você pode usar fuser
ou lsof
.
fuser foo.zip
A saída é assim:
$ fuser archlinux-2013.02.01-dual.iso
/home/chris/archlinux-2013.02.01-dual.iso: 22506
$ awk -F'fuser foo.zip
' '{ print $1 }' /proc/22506/cmdline
wget
Eu uso wget
para baixar arquivos (a maioria são arquivos zip) automaticamente para mim durante a noite.
No entanto, às vezes, de manhã, descubro que alguns arquivos não podem ser descompactados. Eu não sei porque isso está acontecendo, talvez seja algo errado com o servidor remoto.
Eu quero escrever um script para testar arquivos zip na minha pasta de downloads periodicamente usando 'unzip -t', mas não quero testar os arquivos que estão sendo baixados. Então, como posso saber se um arquivo está sendo usado por wget
?
Altere o script de download para baixar arquivos para um nome ou diretório temporário e mova o resultado quando o download estiver concluído. Isso é mais robusto do que tentar detectar que o wget ainda está funcionando; em particular, se wget for interrompido (por exemplo, por uma reinicialização), você não arriscará confundir um arquivo parcial com um download completo. Além disso, certifique-se de testar o status de retorno do wget. As chances são de que seus arquivos quebrados são, na verdade, arquivos truncados resultantes de um download interrompido.
cd incoming &&
wget http://example.com/foo.zip &&
mv foo.zip ..
Você pode usar o lsof para verificar se o arquivo está aberto por algum programa.
for FILE in /path/to/files/*.zip
do
if [ -z "$(lsof $FILE)" ]
then
unzip $FILE
fi
done
ou algo semelhante