Как рекурсивно удалить конечные пробелы из всех файлов? - PullRequest
117 голосов
/ 29 сентября 2008

Как вы можете удалить все конечные пробелы всего проекта? Начиная с корневого каталога и удаляя завершающие пробелы из всех файлов во всех папках.

Кроме того, я хочу иметь возможность изменять файл напрямую, а не просто распечатывать все в стандартный вывод.

Ответы [ 14 ]

4 голосов
/ 05 августа 2014

Ruby:

irb
Dir['lib/**/*.rb'].each{|f| x = File.read(f); File.write(f, x.gsub(/[ \t]+$/,"")) }
4 голосов
/ 20 сентября 2012

Это хорошо работает .. добавить / удалить --include для определенных типов файлов:

egrep -rl ' $' --include *.c *  | xargs sed -i 's/\s\+$//g'
2 голосов
/ 02 ноября 2016

1) Многие другие ответы используют -E. Я не уверен почему, так как это недокументированная совместимость BSD опция. -r следует использовать вместо.

2) Для других ответов используйте -i ''. Это должно быть просто -i (или -i'', если предпочтено), потому что -i имеет суффикс сразу после.

3) Git специфическое решение:

git config --global alias.check-whitespace \
'git diff-tree --check $(git hash-object -t tree /dev/null) HEAD'

git check-whitespace | grep trailing | cut -d: -f1 | uniq -u -z | xargs -0 sed --in-place -e 's/[ \t]+$//'

Первый регистрирует псевдоним git check-whitespace, в котором перечислены файлы с конечными пробелами. Второй работает на них sed.

Я использую только \t вместо [:space:], поскольку я обычно не вижу вертикальных вкладок, каналов и неразрывных пробелов. Ваше измерение может отличаться.

1 голос
/ 08 августа 2012

Это то, что у меня работает (Mac OS X 10.8, GNU sed, установленный Homebrew):

find . -path ./vendor -prune -o \
  \( -name '*.java' -o -name '*.xml' -o -name '*.css' \) \
  -exec gsed -i -E 's/\t/    /' \{} \; \
  -exec gsed -i -E 's/[[:space:]]*$//' \{} \; \
  -exec gsed -i -E 's/\r\n/\n/' \{} \;

Удалены завершающие пробелы, заменены вкладки пробелами, заменен Windows CRLF на Unix \n.

Что интересно, мне нужно выполнить это 3-4 раза, прежде чем все файлы будут исправлены, всеми инструкциями по очистке gsed.

...