次のコマンドを使用してサブボリュームセットを見つけて削除します。
find /.snapshots/ -name backup-* -type d -exec btrfs subvolume delete {} \;
うまくいきますが、findで予期しない結果が表示されます。
Delete subvolume (no-commit): '/.snapshots/backup-24-11-2021'
find: ‘/.snapshots/backup-24-11-2021’: No such file or directory
Delete subvolume (no-commit): '/.snapshots/backup-25-11-2021'
find: ‘/.snapshots/backup-25-11-2021’: No such file or directory
私はUnixの専門家ではないので、これは少し混乱しています。なぜこれが起こるのですか?
ベストアンサー1
find
が到着したら、/.snapshots/backup-24-11-2021
の指示に従ってディレクトリであることを確認してください-type d
。ディレクトリなので、指示に従ってくださいfind
。完了すると、ディレクトリに到達したばかりで、そのディレクトリに戻ります。結局、ディレクトリへの再帰は.しかし、そのディレクトリはちょうど削除されました。したがって、問題を発見して報告してください。btrfs subvolume delete /.snapshots/backup-24-11-2021
-exec …
find
find
btrfs subvolume delete
find
find
削除したいスナップショットの下で繰り返さないように指示します。これは通常、削除するディレクトリツリー全体を検索するために使用されます。
find /.snapshots/ -name 'backup-*' -type d -exec btrfs subvolume delete {} \; -prune
(注:句の周りに欠落している引用符も修正されました。引用-name
符がないとbackup-*
実行時に拡張されるため、現在のディレクトリに一致するファイルがある場合、または使用中のシェルにエラーがある場合、コマンドは操作を実行しません。グローバルに一致しませんとfind
予想backup-*
しかし、実際にはこれは完全に間違ったコマンドかもしれません。find
以下を見てください/.snapshots
。たとえば、/.snapshots/saved-for-posterity/usr/src/backup-app
コマンドがfind
call で指示するディレクトリがある場合、btrfs subvolume delete /.snapshots/saved-for-posterity/usr/src/backup-app
これは意味がありません。すべてのスナップショットがのサブディレクトリであると仮定し、追加の再帰を防ぐには、次のように渡し/.snapshots
ます。-maxdepth 1
find /.snapshots/ -maxdepth 1 -name 'backup-*' -type d -exec btrfs subvolume delete {} \;
唯一の違いは
btrfs subvolume delete /.snapshots/backup-*
現在バックアップがない場合は、btrfs subvolume delete
リテラルパラメータとして呼び出されます。/.snapshots/backup-*