シンボリックリンクが消えるとファイルを削除する

シンボリックリンクが消えるとファイルを削除する

私のRPiで実行されているtvheadendがあり、録画コンテンツをローカルに保存している間にディスクが80%いっぱいになると、その内容をSSHfsファイルストアに移動し、シンボリックリンクを新しい場所に移動します。

シェルスクリプトからローカルシンボリックリンクが削除された場合(Kodiを介してレコードを削除するなど)、リモートファイルを削除して.tsファイルに制限する方法を探しています。

答え1

いくつかの仮定をしましょう:

  • リモートファイル名は、ローカルファイル名/記号リンクと同じです。
  • ローカルファイルはすべて1つのディレクトリにあります。
  • リモートファイルはすべて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>

このコードはシンボリックリンクが存在し、実際にシンボリックリンクかどうかをテストします。それ以外の場合は削除されます。

関連情報