8 votes

Recherche de modules de nœuds sur l'ordinateur, ajout du fichier .nosync

Par https://medium.com/@isaiah.taylor/how-to-maintain-node-projects-with-icloud-drive-4c6549f7c806 je peux empêcher les dossiers node_modules de se synchroniser via iCloud Drive.

Le problème est qu'il y a souvent beaucoup de dossiers node_modules. Beaucoup, beaucoup. Et j'oublie souvent avant de commencer à copier.

Questions (1) Existe-t-il un moyen de parcourir mon disque dur, de trouver les dossiers node_modules et d'ajouter un fichier .nosync ?

(2) Existe-t-il un moyen de maintenir cette exploration en arrière-plan ? De sorte que cette exploration se produise pour tout nouveau dossier ? Je me demande si c'est une sorte de Hammerspoon peut-être ?

8voto

nohillside Points 82672

Vous pouvez exécuter la commande suivante pour créer un .nosync dans chaque node_modules dossier

find ~ -type d -name node_modules -exec touch {}/.nosync \;

Cela va regarder tout ce qui se trouve dans votre répertoire personnel. Vous pouvez la limiter au Desktop en remplaçant ~ avec ~/Desktop .

Pour que la commande soit exécutée régulièrement, vous pouvez créer une entrée crontab :

  • Exécuter EDITOR=nano crontab -e pour commencer le montage. Si vous n'avez pas créé une autre entrée avant, le fichier sera vide.
  • Ajouter

    0 * * * * find $HOME -type d -name node_modules -exec touch {}/.nosync \; 

    pour qu'il fonctionne toutes les heures, ou

    0 */3 * * * find $HOME -type d -name node_modules -exec touch {}/.nosync \; 

    de le faire fonctionner toutes les trois heures

  • Tipo Ctrl-X et répondez "Y" à l'invite de sauvegarde

2voto

Ben Orgera Points 56

Il s'avère que mettre un fichier appelé .nosync dans les dossiers que vous souhaitez ignorer dans icloud ne fonctionne plus (comme dans la réponse acceptée), donc changer le nom du dossier pour qu'il se termine par .nosync, et ajouter un lien symbolique, est la meilleure option suivante.

Voici une fonction de l'interpréteur de commandes (à placer dans .zshrc ou .bashrc) appelée "nosync" qui parcourt les documents et le bureau, en ajoutant les éléments suivants .nosync à la fin de vos dossiers .git et de vos dossiers node_modules, et en créant un lien symbolique vers le nouveau dossier caché depuis l'emplacement d'origine. Ce script gère correctement les dossiers imbriqués (uniquement les liens symboliques et ignore les node_modules de niveau supérieur). Ce script ajoute également l'attribut qui indique à Dropbox d'ignorer un fichier (pour ceux d'entre vous qui utilisent également la synchronisation Dropbox). Pour l'exécuter, vous avez besoin de brew install findutils parce que la commande standard de recherche de Mac ne supporte pas les trucs sophistiqués.

nosync() {
  # GNU find (brew install findutils), because it supports xtype, find directories, following symlinks, where the end file (not following its symlink (via -xtype)) is not a symlink
  # and the path is not under a nosync dir, and the path is pruned (no nested node_modules)
  # move the folder to a dot file which is dropbox and icloud ignored, symlink the old folder, and suppress cyclical symlink warnings

  gfind -L ~/Documents -name node_modules -prune -not -path '*.nosync*' -type d -not -xtype l -exec sh -c 'mv "$0" "$(dirname "$0")/.$(basename "$0").nosync" && ln -s "$(dirname "$0")/.$(basename "$0").nosync" "$0" && xattr -w com.dropbox.ignored 1 "$(dirname "$0")/.$(basename "$0").nosync" && echo "$0"' {} \; 2> >(grep -v "File system loop detected")
  gfind -L ~/Desktop -name node_modules -prune -not -path '*.nosync*' -type d -not -xtype l -exec sh -c 'mv "$0" "$(dirname "$0")/.$(basename "$0").nosync" && ln -s "$(dirname "$0")/.$(basename "$0").nosync" "$0" && xattr -w com.dropbox.ignored 1 "$(dirname "$0")/.$(basename "$0").nosync" && echo "$0"' {} \; 2> >(grep -v "File system loop detected")

  # adds a dot for node_modules, but not for .git, which is already hidden

  gfind -L ~/Documents -name .git -prune -not -path '*.nosync*' -type d -not -xtype l -exec sh -c 'mv "$0" "$0".nosync && ln -s "$0".nosync "$0" && xattr -w com.dropbox.ignored 1 "$0".nosync && echo "$0"' {} \;  2> >(grep -v "File system loop detected")
  gfind -L ~/Desktop -name .git -prune -not -path '*.nosync*' -type d -not -xtype l -exec sh -c 'mv "$0" "$0".nosync && ln -s "$0".nosync "$0" && xattr -w com.dropbox.ignored 1 "$0".nosync && echo "$0"' {} \;  2> >(grep -v "File system loop detected")
}

Vous pourriez vouloir configurer une tâche cron pour exécuter ce script de temps en temps.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X