如果符号链接消失则删除文件

如果符号链接消失则删除文件

我的 RPi 上运行着 tvheadend,虽然它在本地存储录制内容,但当磁盘达到 80% 满时,它会将它们移至 SSHfs 文件存储并符号链接到新位置。

我正在寻找一种方法,在 shell 脚本中,当本地符号链接被删除时删除远程文件(例如,我通过 Kodi 删除记录),可能会将其限制为 .ts 文件。

答案1

做出几个假设:

  • 远程文件名与本地文件名/符号链接相同
  • 本地文件都在一个目录中
  • 远程文件都在一个目录中

然后,您可以列出远程文件并删除任何没有本地文件或符号链接的文件。像这样的东西可以工作

#!/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

如果您只想删除特定目录中的所有本地悬空符号链接,您可以稍微简化代码:

#!/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

答案2

如果我正确理解了这个问题,那么就可以:

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

该代码测试是否存在并且实际上是一个符号链接。如果没有,将被删除。

相关内容