にFUSEがインストールされていますが、/media/writable
時々このFUSEインストールは切断されますが、いくつかのプログラムはまだあります/media/writable
。
FUSE マウントサービスを再起動すると、ディレクトリが空でないため、マウントが失敗します。
rm 時に位置を削除するには、どのようにパラメータをrm
使用しますか?--one-file-system
/media/writable
地元の代わりにファイルシステムヒューズの取り付けファイルシステム?その中に別のフォルダがあるため、親フォルダでは実行/media/
できません。rm
親フォルダをrmできるように、フォルダを1レベル下に移動する方が良いですか?/media/writable/mount
または、削除したいファイルシステムを選択する方法はありますか?
私はcoreutils 8.28でUbuntu 18.04.1 LTSを実行しています。
編集:私の現在のアプローチはこれですが、より良い方法があるかどうかを確認したかったです。
ExecStartPre=-/bin/mountpoint /media/writable/ || /usr/bin/stat /media/writable/MOUNTED || /bin/rm/ --one-file-system -rf /media/writable/*
ベストアンサー1
1つの方法はcd
ディレクトリに移動することです。クリーンアップスクリプトを実行すると、ディレクトリがマウントされていても、以前のローカルディレクトリが表示されます(相対パスのみを使用している場合)。
#! /bin/zsh -
zmodload zsh/stat || exit
cd /media/writable || exit
stat -H parent .. || exit
stat -H here . || exit
if (( parent[device] == here[device] )); then
# current directory is on the same device as parent
all_files=(*(ND))
(( $#files == 0 )) ||
rm -rf --one-file-system --preserve-root=all -- $all_files
fi
D
glob修飾子は隠しファイルも削除することができ、そのファイルの一部が他のファイルシステムのマウントポイントである場合は補完的に--preserve-root=all
使用できます--one-file-system
$all_files
現在の実装では競争がないようには見えません。だから私はそれを避けますrm -rf --one-file-system --preserve-root=all /media/writable
)。
それでも失敗する可能性があります。「パラメータリストが長すぎます」ファイルが多いとエラーが発生します。次のように書くことで問題を解決できます。
print -rNC1 -- $all_files |
xargs -r0 rm -rf --one-file-system --preserve-root=all --