Apagar arquivo se o link simbólico desaparecer

1

Tenho o tvheadend em execução no meu RPi e, embora ele armazene gravações localmente, quando o disco chega a 80%, ele é movido para um diretório SSHfs e links simbólicos para o novo local.

Estou procurando uma maneira, em um script de shell, de excluir os arquivos remotos quando o link simbólico local for excluído (por exemplo, excluir uma gravação pelo Kodi), provavelmente limitando isso a arquivos .ts.

    
por deejay31 22.02.2017 / 15:45

2 respostas

2

Fazendo várias suposições:

  • O nome do arquivo remoto é o mesmo que o nome do arquivo local / symlink
  • Os arquivos locais estão todos em um único diretório
  • Os arquivos remotos estão todos em um único diretório

Você pode então listar arquivos remotos e deletar qualquer um para o qual não exista nenhum arquivo ou link simbólico local. Algo assim poderia funcionar

#!/bin/bash
#
rmt=/path/to/sshfs/storage
lcl=/path/to/local/storage

for itempath in "$rmt"/*.ts
do
    itemfile="${itempath/*\/}"
    if test ! -h "$lcl/$itemfile"
    then
        echo "Removing remote $itemfile with no local symlink" >&2
        rm -f "$itempath"
    fi
done

Se você quiser apenas excluir todos os links simbólicos locais em um diretório específico, você poderá simplificar o código:

#!/bin/bash
#
lcl=/path/to/local/storage

for item in "$lcl"/*.ts
do
    if test -h "$item" -a ! -e "$item"
    then
        echo "Removing dangling symlink $item" >&2
        rm -f "$item"
    fi
done
    
por 22.02.2017 / 17:52
0

Se eu entendi a pergunta corretamente, isso funcionará:

test -h <symlink> || rm <remote file>

O código testa se existe e é realmente um symlink. Caso contrário, será eliminado.

    
por 22.02.2017 / 15:52