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
lsoffor0, 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 .