バックアップには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スクリプトも問題ありません。
そのための解決策はありますか?
すべてを検索して除外できます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
古い投稿を復活させましたが、同じことを探していたところ、これを試してしまいました Asimovと呼ばれるツール 。
Asimovはnode_modules
(nodeJs)またはvendor
(php composer)を探してディレクトリをスキャンし、次のTimeCapsuleバックアップから自動的に除外します。また、それらの除外を更新するcronジョブを追加します。
これが誰かを助けることを願っています。
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
Samuel Meuliによるtmignoreもあります: https://github.com/samuelmeuli/tmignore
.gitignoreファイルを検索し、タイムマシンのバックアップから除外します。
@Damienの回答を拡張すると、これは宣伝どおりに機能することがわかり、元の質問で問題を解決しました。このツールはGithubでオープンソース化されており、ニーズに合わせて編集できます。
デフォルトでは、ファイルシステムをスキャンし、すべてのnode_modules
、.vscode
、vendor
、.vagrant
、bower_components
、target
、stack-work
、Carthage
、Pods
および.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
これを行う別の方法は、 this Gist に示すように、npm
やcargo
のようなパッケージマネージャーをラップすることです。
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 /ディスクでの方が簡単です。