Comment pouvez-vous supprimer tous les espaces blancs de fin d'un projet entier? En commençant par un répertoire racine et en supprimant l'espace blanc de fin de tous les fichiers de tous les dossiers.
De plus, je veux pouvoir modifier le fichier directement, et pas seulement tout imprimer sur stdout.
bash
whitespace
iamjwc
la source
la source
Réponses:
Voici une solution OS X> = 10.6 Snow Leopard.
Il ignore les dossiers .git et .svn et leur contenu. De plus, il ne laissera pas de fichier de sauvegarde.
la source
\+
au lieu de*
dans la chaîne de remplacement - Sinon, il correspond à chaque ligne.sed: RE error: illegal byte sequence
pour moi.export LANG=C
et réessayezexport LC_CTYPE=C
que l'on trouve ici: stackoverflow.com/questions/19242275/…Utilisation:
si vous ne voulez pas que les fichiers ".bak" soient générés:
en tant qu'utilisateur zsh, vous pouvez omettre l'appel à rechercher et utiliser à la place:
Remarque: Pour éviter la destruction de
.git
répertoire, essayez d' ajouter:-not -iwholename '*.git*'
.la source
.git
répertoires, quelle que soit la profondeur de leur imbrication.find . -not \( -name .svn -prune -o -name .git -prune \) -type f -print0 | xargs -0 perl -pi -e 's/ +$//'
rsync -rv --exclude=.git repo/ repo2/
après quoi les modifications locales dansrepo
étaient également dans le (non endommagé)repo2
.Deux approches alternatives qui fonctionnent également avec les nouvelles lignes DOS (CR / LF) et font un très bon travail pour éviter les fichiers binaires :
Solution générique qui vérifie que le type MIME commence par
text/
:Solution spécifique au référentiel Git de Mat qui utilise l'
-I
option degit grep
pour ignorer les fichiers que Git considère comme binaires:la source
sed
l'option suffixe to-i
est facultative , mais dans BSDsed
ce n'est pas le cas. Ce n'est de toute façon pas nécessaire à proprement parler ici, alors je vais simplement le supprimer.Dans Bash:
find dir -type f -exec sed -i 's/ *$//' '{}' ';'
Remarque: Si vous utilisez
.git
référentiel, essayez d' ajouter:-not -iwholename '.git'
.la source
Cela a fonctionné pour moi dans OSX 10.5 Leopard, qui n'utilise pas GNU sed ou xargs.
Faites juste attention à cela si vous avez des fichiers qui doivent être exclus (je l'ai fait)!
Vous pouvez utiliser -prune pour ignorer certains répertoires ou fichiers. Pour les fichiers Python dans un référentiel git, vous pouvez utiliser quelque chose comme:
la source
find dir -not -path '.git' -iname '*.py' -print0 | xargs -0 sed --in-place=.bak 's/[[:space:]]*$//'
. Remplacezdir
par le répertoire en question comme niveau supérieur à partir duquel récurer.sed -i .bak
? Ne devrait-il pas êtresed -i.bak
(sans l'espace)?Ack a été fait pour ce genre de tâche.
Il fonctionne exactement comme grep, mais sait ne pas descendre dans des endroits comme .svn, .git, .cvs, etc.
Beaucoup plus facile que de sauter à travers des cerceaux avec find / grep.
Ack est disponible via la plupart des gestionnaires de paquets (comme ack ou ack-grep ).
C'est juste un programme Perl, il est donc également disponible dans une version à fichier unique que vous pouvez simplement télécharger et exécuter. Voir: Ack Install
la source
ack
est merveilleux. Je l'utilise depuis un certain nombre d'années et est disponible dans presque tous les dépôts de packages pour la plupart des distributions.ex
Essayez d'utiliser l' éditeur Ex (qui fait partie de Vim):
Remarque: Pour la récursivité (bash4 & zsh), nous utilisons une nouvelle option de globbing (
**/*.*
). Activer parshopt -s globstar
.Vous pouvez ajouter la fonction suivante dans votre
.bash_profile
:sed
Pour l'utilisation
sed
, vérifiez: Comment supprimer les espaces blancs de fin avec sed?find
Recherchez le script suivant (par exemple
remove_trail_spaces.sh
) pour supprimer les espaces de fin des fichiers:Exécutez ce script à partir du répertoire que vous souhaitez analyser. Sur OSX à la fin, il supprimera tous les fichiers se terminant par
.bak
.Ou juste:
ce qui est recommandé par Spring Framework Code Style .
la source
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
supprime seulement un espace de fin au lieu de tous.J'ai fini par ne pas utiliser find et ne pas créer de fichiers de sauvegarde.
En fonction de la profondeur de l'arborescence des fichiers, cette (version plus courte) peut être suffisante pour vos besoins.
REMARQUE cela prend également des fichiers binaires, par exemple.
la source
Au lieu d'exclure des fichiers, voici une variante de ce qui précède.Les listes blanches explicites des fichiers, en fonction de l'extension de fichier, que vous souhaitez supprimer, n'hésitez pas à assaisonner à votre goût:
la source
-name "*.rb*"
J'ai fini par exécuter ceci, qui est un mélange entre la version pojo et adams.
Il nettoiera à la fois les espaces de fin et également une autre forme d'espaces de fin, le retour chariot:
Il ne touchera pas le dossier .git s'il y en a un.
Edit : le rend un peu plus sûr après le commentaire, ne permettant pas de prendre des fichiers avec ".git" ou ".svn" dedans. Mais attention, il ne touche pas aux fichiers binaires si vous avez quelques - uns. Utilisez
-iname "*.py" -or -iname "*.php"
après-type f
si vous voulez seulement qu'il touche par exemple les fichiers .py et .php.Mise à jour 2 : Il remplace désormais toutes sortes d'espaces en fin de ligne (ce qui signifie également des tabulations)
la source
Cela fonctionne bien .. ajouter / supprimer --include pour des types de fichiers spécifiques:
la source
Rubis:
la source
J'utilise des expressions régulières. 4 étapes:
Cela supprime tous les espaces de fin à la fin de chaque ligne dans tous les fichiers. Et vous pouvez exclure certains fichiers qui ne correspondent pas à ce besoin.
la source
1) De nombreuses autres réponses utilisent
-E
. Je ne sais pas pourquoi, car c'est une option de compatibilité BSD non documentée .-r
devrait être utilisé à la place.2) D'autres réponses utilisent
-i ''
. Cela devrait être juste-i
(ou-i''
si préféré), car-i
a le suffixe juste après.3) Solution spécifique à Git:
Le premier enregistre un alias git
check-whitespace
qui répertorie les fichiers avec des espaces de fin. Le second courtsed
sur eux.J'utilise uniquement
\t
plutôt que[:space:]
comme je ne vois généralement pas d'onglets verticaux, de flux de formulaires et d'espaces insécables. Votre mesure peut varier.la source
Voici ce qui fonctionne pour moi (Mac OS X 10.8, GNU sed installé par Homebrew):
Suppression des espaces de fin, remplace les tabulations par des espaces, remplace Windows CRLF par Unix
\n
.Ce qui est intéressant, c'est que je dois l'exécuter 3-4 fois avant que tous les fichiers ne soient corrigés, selon toutes les
gsed
instructions de nettoyage .la source