Não consigo pensar em uma maneira totalmente elegante de fazer isso. Eu estava esperando que find
tivesse alguma facilidade para isso. Isso teria facilitado isso. Mas eu não encontrei uma opção para identificar um arquivo como aberto, então eu fiz um pequeno script para baixar a lógica.
#!/bin/sh
DIR=/some/files
NEW_DIR=/some/new/files
OPEN_FILES=$(lsof -Fn $DIR/* | grep ^n | cut -c2- | sort -u)
for file in $DIR/*; do
if echo "$OPEN_FILES" | grep -q $file; then
echo "$file is opened - not moving"
continue
fi
mv $file $NEW_DIR/
echo "$file moved"
done
É meio grosseiro, honestamente, mas espero que seja a base do que você quer e você pode modificar mais conforme necessário. Se alguém souber de uma maneira de fazer isso com find
, por favor entre em contato. find
with -exec mv
opção é realmente boa para coisas como essa.