web-dev-qa-db-ja.com

タイムマシンバックアップから正規表現(?)でフォルダーを除外する

バックアップにはTime Machineサーバーを使用しています。その間、私は多くのWebアプリケーションを開発しています。プロジェクトは通常、バックアップするアプリケーションファイルを含むフォルダーと、バックアップしないnode_modulesフォルダー(外部ライブラリ)で構成されます。言い換えると、フォルダ構造。です:

projects
-- app1
---- src
---- node_modules -- I want to ignore only this folder
---- package.json
-- app2
---- whatever-else
---- node_modules -- I want to ignore only this folder
---- package.json
---- elephant.jpg

等.

アプリケーションの量は大きく、増加しています(現在は20を超えています)。node_modulesフォルダーのサイズは、通常、プロジェクトの他の部分の数千倍です。サイズは巨大で、ファイルの量も多くなります。

システム全体のnode_modulesフォルダをすべて除外する方法(.gitignoreと同様、ただしタイムマシンの場合)?マスクでそれを行う方法はありますか?除外したフォルダーに常に手動でフォルダーを追加したくないのです。

新しいフォルダをN分ごとに検索して無視するようにするcronスクリプトも問題ありません。

そのための解決策はありますか?

16
smnbbrv

すべてを検索して除外できますnode_modules現在のパスからのフォルダ。ホームディレクトリ(~)、 このような:

$ find `pwd` -maxdepth 3 -type d -name 'node_modules' | xargs -n 1 tmutil addexclusion

@peterdemartiniへの称賛: https://Gist.github.com/peterdemartini/4c918635208943e7a042ff5ffa789fc1

除外されたフォルダは、Time Machineのシステム環境設定に表示されないか、このコマンドを実行しても表示されないことに注意してください。

$ defaults read /Library/Preferences/com.Apple.TimeMachine.plist SkipPaths

このコマンドを使用すると(tmutil addexclusion)、除外したアイテムを移動しても、Time Machine除外リストに残ります。これは、Time Machine設定ペインからアイテムを除外した場合とは異なります。上記のコマンドを-pフラグと一緒に使用すると、スティッキーにならず、Time Machine設定ペインから追加した除外と同じになります。

https://www.macworld.com/article/2033804/control-time-machine-from-the-command-line.html

14
Gianfranco P.

古い投稿を復活させましたが、同じことを探していたところ、これを試してしまいました Asimovと呼ばれるツール

Asimovはnode_modules(nodeJs)またはvendor(php composer)を探してディレクトリをスキャンし、次のTimeCapsuleバックアップから自動的に除外します。また、それらの除外を更新するcronジョブを追加します。

これが誰かを助けることを願っています。

4
Damien

Reddit Post

Reddit Post を見つけました。これはあなたが探しているものですか?

通常の状況では、Time Machineは、バックアップドライブが接続されたとき、または最新のバックアップの1時間後のいずれか遅い方で自動的に実行されます。独自の起動デーモンで同じことを達成できます。 /Library/LaunchDaemons/local.tmupdate.plistにファイルを作成し、その内容を次のように設定します。

次に、スクリプト/usr/local/bin/tmupdate.shを設定して、古い除外リストをクリアし、新しいリストで再作成して、バックアップ自体を開始します。

#!/bin/sh
defaults delete /Library/Preferences/com.Apple.TimeMachine.plist SkipPaths
mdfind 'kMDItemUserTags == "No Backup"' -0 | xargs -0 tmutil addexclusion
tmutil startbackup --auto
4
Hydraxan14

Samuel Meuliによるtmignoreもあります: https://github.com/samuelmeuli/tmignore

.gitignoreファイルを検索し、タイムマシンのバックアップから除外します。

1
chris

@Damienの回答を拡張すると、これは宣伝どおりに機能することがわかり、元の質問で問題を解決しました。このツールはGithubでオープンソース化されており、ニーズに合わせて編集できます。

デフォルトでは、ファイルシステムをスキャンし、すべてのnode_modules.vscodevendor.vagrantbower_componentstargetstack-workCarthagePodsおよび.buildを除外します。これらはasimovというファイルで変更できます

readonly FILEPATHS=(
    "vendor ../composer.json"
    "node_modules ../package.json"
    ".vagrant ../Vagrantfile"
    "bower_components ../bower.json"
    "target ../pom.xml"
    ".stack-work ../stack.yaml"
    "Carthage ../Cartfile"
    "Pods ../Podfile"
    ".build ../Package.Swift"
)

使い方

本質的に、AsimovはAppleのtmutilプログラムの単純なラッパーであり、Time Machineをより詳細に制御できます。

Asimovは認識された依存関係ディレクトリを見つけ、対応する依存関係ファイルが存在することを確認し、存在する場合は、Time Machineに依存関係ディレクトリのバックアップについて心配しないように指示します。

複数回実行することも心配しないでください。 Asimovは、ディレクトリが既に除外対象としてマークされているかどうかを確認できるほど賢いです。 https://github.com/stevegrunwell/asimov

1
jmuchiri

これを行う別の方法は、 this Gist に示すように、npmcargoのようなパッケージマネージャーをラップすることです。

tmutil_exclude() {
    # todo: recurse to parent dirs to support commands that execute in project subdirs
    DIR=$1
    DEP_FILE=$2

    if [ -d "$DIR" ] && [ -f "$DEP_FILE" ] && ! tmutil isexcluded "$DIR" | grep -q '\[Excluded\]'; then
        tmutil addexclusion "$DIR"
        echo "tmutil: ${DIR} has been excluded from Time Machine backups"
    fi
}

__npm_wrapper () {
    command npm "$@"
    EXIT_CODE=$?
    tmutil_exclude "node_modules" "package.json"
    return $EXIT_CODE
}

alias npm=__npm_wrapper

このアプローチの利点は、定期的なスキャンを行うユーティリティが除外する前に、Time Machineが依存関係ディレクトリをバックアップする機会がないことです。また、このようなオンデマンドチェックは、定期的な完全ホームディレクトリスキャンよりもCPU /ディスクでの方が簡単です。

0
Poma