전체 프로젝트의 후행 공백을 모두 제거하려면 어떻게해야합니까? 루트 디렉토리에서 시작하여 모든 폴더의 모든 파일에서 후행 공백을 제거합니다.
또한 모든 것을 stdout에 인쇄하는 것이 아니라 파일을 직접 수정할 수 있기를 원합니다.
답변
다음은 OS X> = 10.6 Snow Leopard 솔루션입니다.
.git 및 .svn 폴더 와 그 내용을 무시합니다 . 또한 백업 파일을 남기지 않습니다.
export LC_CTYPE=C
export LANG=C
find . -not \( -name .svn -prune -o -name .git -prune \) -type f -print0 | xargs -0 sed -i '' -E "s/[[:space:]]*$//"
답변
사용하다:
find . -type f -print0 | xargs -0 perl -pi.bak -e 's/ +$//'
“.bak”파일 생성을 원하지 않는 경우 :
find . -type f -print0 | xargs -0 perl -pi -e 's/ +$//'
zsh 사용자는 찾기 호출을 생략하고 대신 다음을 사용할 수 있습니다.
perl -pi -e 's/ +$//' **/*
참고 : .git
디렉토리 파괴를 방지하려면 다음을 추가해보십시오 -not -iwholename '*.git*'
..
답변
DOS 줄 바꿈 (CR / LF)과 함께 작동하고 바이너리 파일 을 피하는 데 꽤 좋은 작업을 수행하는 두 가지 대체 방법 :
MIME 유형이 다음으로 시작하는지 확인하는 일반 솔루션text/
:
while IFS= read -r -d '' -u 9
do
if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]]
then
sed -i 's/[ \t]\+\(\r\?\)$/\1/' -- "$REPLY"
else
echo "Skipping $REPLY" >&2
fi
done 9< <(find . -type f -print0)
Git 이 바이너리로 간주하는 파일을 건너 뛰는-I
옵션을 사용하는 Mat의 Git 저장소 별 솔루션git grep
:
git grep -I --name-only -z -e '' | xargs -0 sed -i 's/[ \t]\+\(\r\?\)$/\1/'
답변
Bash에서 :
find dir -type f -exec sed -i 's/ *$//' '{}' ';'
참고 : .git
저장소를 사용하는 경우 추가해보십시오 -not -iwholename '.git'
..
답변
이것은 GNU sed 또는 xargs를 사용하지 않는 OSX 10.5 Leopard에서 저에게 효과적이었습니다.
find dir -type f -print0 | xargs -0 sed -i.bak -E "s/[[:space:]]*$//"
제외해야 할 파일이 있으면 조심하십시오 (내가했습니다)!
-prune을 사용하여 특정 디렉토리 나 파일을 무시할 수 있습니다. git 저장소의 Python 파일의 경우 다음과 같이 사용할 수 있습니다.
find dir -not -path '.git' -iname '*.py'
답변
이러한 종류의 작업을 위해 Ack가 만들어졌습니다.
grep처럼 작동하지만 .svn, .git, .cvs 등과 같은 위치로 내려 가지 않는 것을 알고 있습니다.
ack --print0 -l '[ \t]+$' | xargs -0 -n1 perl -pi -e 's/[ \t]+$//'
find / grep으로 농구를 뛰어 넘는 것보다 훨씬 쉽습니다.
Ack는 대부분의 패키지 관리자 ( ack 또는 ack-grep ) 를 통해 사용할 수 있습니다 .
이것은 단지 Perl 프로그램이기 때문에 다운로드하고 실행할 수있는 단일 파일 버전으로도 제공됩니다. 참조 : Ack Install
답변
ex
사용해보십시오 Ex 편집기를 (Vim의 일부) :
$ ex +'bufdo!%s/\s\+$//e' -cxa **/*.*
참고 : 재귀 (bash4 및 zsh)의 경우 경우 새로운 globbing 옵션 ( **/*.*
)을 사용합니다. 에서 활성화합니다 shopt -s globstar
.
다음 기능을 추가 할 수 있습니다. .bash_profile
.
# Strip trailing whitespaces.
# Usage: trim *.*
# See: https://stackoverflow.com/q/10711051/55075
trim() {
ex +'bufdo!%s/\s\+$//e' -cxa $*
}
sed
사용을 위해 sed
하려면 sed로 후행 공백을 제거하는 방법을 확인하십시오.
find
remove_trail_spaces.sh
파일에서 후행 공백을 제거하기위한 다음 스크립트 (예 :)를 찾으십시오 .
#!/bin/sh
# Script to remove trailing whitespace of all files recursively
# See: /programming/149057/how-to-remove-trailing-whitespace-of-all-files-recursively
case "$OSTYPE" in
darwin*) # OSX 10.5 Leopard, which does not use GNU sed or xargs.
find . -type f -not -iwholename '*.git*' -print0 | xargs -0 sed -i .bak -E "s/[[:space:]]*$//"
find . -type f -name \*.bak -print0 | xargs -0 rm -v
;;
*)
find . -type f -not -iwholename '*.git*' -print0 | xargs -0 perl -pi -e 's/ +$//'
esac
스캔하려는 디렉토리에서이 스크립트를 실행하십시오. 마지막에 OSX에서는 .bak
.
아니면 그냥 :
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
Spring Framework Code Style에서 권장하는 방식 입니다.
