Você pode usar o comando inotifywait
de inotify-tools em um script para criar links físicos de arquivos criados em %código%. Por exemplo, vincule todos os arquivos criados de /tmp/some_folder
a /tmp/some_folder
:
#!/bin/sh
ORIG_DIR=/tmp/some_folder
CLONE_DIR=/tmp/some_folder_bak
mkdir -p $CLONE_DIR
inotifywait -mr --format='%w%f' -e create $ORIG_DIR | while read file; do
echo $file
DIR='dirname "$file"'
mkdir -p "${CLONE_DIR}/${DIR#$ORIG_DIR/}"
cp -rl "$file" "${CLONE_DIR}/${file#$ORIG_DIR/}"
done
Como são links físicos, eles devem ser atualizados quando o programa os modifica, mas não são excluídos quando o programa os remove. Você pode excluir normalmente os clones vinculados.
Note que esta abordagem está longe de ser atômica, então você confia neste script para criar os hard links antes que o programa possa deletar o arquivo recém-criado.
Se você quiser clonar todas alterações em /tmp/some_folder_bak
, você pode usar uma versão mais distribuída do script:
#!/bin/sh
TMP_DIR=/tmp
CLONE_DIR=/tmp/clone
mkdir -p $CLONE_DIR
wait_dir() {
inotifywait -mr --format='%w%f' -e create "$1" 2>/dev/null | while read file; do
echo $file
DIR='dirname "$file"'
mkdir -p "${CLONE_DIR}/${DIR#$TMP_DIR/}"
cp -rl "$file" "${CLONE_DIR}/${file#$TMP_DIR/}"
done
}
trap "trap - TERM && kill -- -$$" INT TERM EXIT
inotifywait -m --format='%w%f' -e create "$TMP_DIR" | while read file; do
if ! [ -d "$file" ]; then
continue
fi
echo "setting up wait for $file"
wait_dir "$file" &
done