ローカルファイルシステムのファイルのみを削除するには、rm --one-file-systemを使用します。

ローカルファイルシステムのファイルのみを削除するには、rm --one-file-systemを使用します。

に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

Dglob修飾子は隠しファイルも削除することができ、そのファイルの一部が他のファイルシステムのマウントポイントである場合は補完的に--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 --

おすすめ記事