特定の親ディレクトリを除く特定の子ディレクトリを含むバックアップスクリプト

特定の親ディレクトリを除く特定の子ディレクトリを含むバックアップスクリプト

どのバックアップをしたいですか?

  1. 、、、を含むユーザーホームディレクトリをDesktop各ユーザーごとにバックアップする必要があります。DocumentsPicturesthunderbird
  2. /homeすべてのユーザーは、それぞれのユーザー名を持つパーティションにあります。
  3. /home除外する必要がある特定のユーザーとファイルがあります。

私は今まで何を試みたか。

$ tar cvf home01 -T include /home  

メモ:Tは、ファイルに記載されている内容だけを取りますが、機能しないことを意味します。

$ find . \( -name \*Desktop -o -name \*Documents\* -o -name \*Pictures\*  -o -name \.thunderbird\*   \)  |
  xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip 

メモ:メンションディレクトリをバックアップしますが、各ユーザーのディレクトリをフォルダに配置します。

例えば

$ ls -l /home

/home/user1/{Desktop,Documents,Pictures,.thunderbird}
/home/user2/{Desktop,Documents,Pictures,.thunderbird}
/home/user3/{Desktop,Documents,Pictures,.thunderbird}
/home/user4/{Desktop,Documents,Pictures,.thunderbird}
/home/user5/{Desktop,Documents,Pictures,.thunderbird}

ホームディレクトリのバックアップを実行し、その項目から除外しますuser1user2user3user4user5

答え1

ほぼ全部来ました!これを行う必要があります:

tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.zip */{Desktop,Documents,Pictures,.thunderbird} --exclude=user4 --exclude=user5

答え2

コマンドの使用法を保存する方法は次のとおりですfind

$ find . \( -type d -path */Desktop -o -path */.thunderbird -o -path */Pictures \\) \! -path '*user[45]*' -prune | xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz

より簡単なバージョンは次のとおりです。

$ find . \( -type d                                                   \
     -path */Desktop -o -path */.thunderbird -o -path */Pictures \)   \
     \! -path '*user[45]*' -prune                                     \
  | xargs  tar zcvf /opt/rnd/home-$(date +%d%m%y).tar.gz

その後、名前は最初の角括弧ブロック内のすべてのディレクトリを探します\( ... \)。ディレクトリは次のとおりです。

  • */Desktop
  • */thunderbird
  • */Pictures

2番目の部分は、パターンに一致するすべてのパスを除外します*user[45]*。これらの項目はリストから削除されました。最後に、結果のディレクトリリストをtarに渡します。

その他の考慮事項

上記はいいえ防弾。その文字列を含むパスまたはuser4そのuser5中に含まれるパスは除外されます。また、コマンドでビルドするものが何であれ、ファイル名のスペースを処理できることを確認してください。

関連情報