検索を使用してRSnapshotツリーから選択的に削除する代替方法は何ですか?

検索を使用してRSnapshotツリーから選択的に削除する代替方法は何ですか?

私はこの問題が再び現れると確信しているので、この問題に対する一般的な解決策を探しています。

医学研究をするお客様がいます。私たちは、地域の保健当局が提供したデータセットを定期的に削除し、それを安全に実行したことを証明する必要があります。

私たちはrsnapshotを使用して維持します。

7 dailies, 
4 weeklies, 
12 monthlies, 
4 yearlies.

最近、rsnapshotツリーから数年前のデータを削除する必要がありました。

/path/to/studyName/data files yyyy mm 01/bunchOfFiles
/path/to/studyName/data files yyyy mm 02/bunchOfFiles
/path/to/studyName/data files yyyy mm 03/bunchOfFiles
/path/to/studyName/randomly placed and named data file 1
/path/to/studyName/randomly named admin file to keep 1
/path/to/studyName/randomly placed and named data file 2
/path/to/studyName/randomly placed and named data file 3
/path/to/studyName/randomly named admin file to keep 2
/path/to/studyName/randomly named admin file to keep 3
/path/to/studyName/randomly placed and named data file 4
/path/to/studyName/randomly named admin file to keep n
/path/to/studyName/randomly placed and named data file 5

./data files* サブディレクトリは他の多くの調査場所にも表示されるため、検索対象として使用できません。

私がやりたいことは、findといくつかのネストされた-execコマンドを含めることです。しかし、findはこれを行うことはできません。

最初の-execコマンドでbash -cネストされた-execを試しました。処理する必要があるさまざまな操作(サブディレクトリ名のスペースなど)を処理した後、タイマーがシャットダウンされ、ファイルのすべてのインスタンス(またはデータを含むサブディレクトリ)を削除する巨大なrmコマンドバーを作成する方が費用対効果が高くなります。ファイル)。

たとえば、-execsがネストできる場合は、次のように動作すると思います。

find /path/to/rsnapshot_tree -type d -name studyName / 
  -exec 'find {}  -type d -iname "data files* -exec rm -rf {} \;'

いいですね。 -execの終了と{}のあいまいさのために機能しませんが、疑似コードを検討してください。

本質的に、

  • rhapshot ツリーで「studyName」ディレクトリの各インスタンスを探し、「data files*」で説明されている 3 つのディレクトリに rm -rf を適用します。
  • 次に、StudyNameディレクトリに誤って配置された各データファイルインスタンスに対してこの操作を繰り返します

150を超えるコマンドの代わりに、スクリプトから6つのコマンドを正しくコピー、貼り付け、編集、使用する必要がありました。

より良いアプローチの提案をいただきありがとうございます。

Linux(debian/ubuntu)およびfreeBSDホストでホストされているrsnapshotツリーがあります。 Bashは常にシェルです(freeBSDホストでデフォルト値を変更しました)。

ベストアンサー1

あなたの質問について完全には明確ではありませんが、次のようなディレクトリ構造がある場合 -

a
a/data
a/data/file1
a/studyName
a/studyName/data
a/studyName/data/file1
a/studyName/data/file2
a/studyName/data/file3

StudyName/data/fileXを探している場合は、次のことができます。

find  . -path "*studyName/data*" -type f
./a/studyName/data/file1
./a/studyName/data/file2
./a/studyName/data/file3

おすすめ記事