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