Os seguintes itens devem funcionar:
for x in 'find <dir> -type f -mtime +14'; do lsof "$x" >/dev/null && echo "$x in use" || echo "$x not in use" ; done
Em vez do comando echo "$x not in use"
, você pode colocar seu comando rm "$x"
.
Como funciona:
- localizar arquivos, modificados pela última vez há 14 dias:
find <dir> -type f -mtime +14
- faça um loop sobre itens em uma lista:
for x in <list>; do <command>; done
- execute o comando 2 se o resultado de
lsof
for0
, senão execute o comando 1:
lsof "$x" && <command 1> || <command 2>
Isso depende da avaliação lenta do Bash para executar o comando 1 ou o comando 2.
No meu sistema (Ubuntu 14.04) isso funciona com nomes de arquivo com espaços neles e até mesmo para nomes de arquivos com ?
e *
neles.
No entanto, isso não garante que ele funcionará com todos os shell de qualquer sistema. Por favor, teste antes de substituir o comando echo
pelo comando rm
.