파일 시스템 분기에서 각 파일의 모든 탭을 각각 2 개의 공백으로 바꾸는 방법은 무엇입니까?


10

나는 스칼라를 코딩하고 규칙은 식별을 위해 레벨 당 이중 공백을 사용하는 것입니다. 그러나 다른 편집기를 사용하면 소스와 공백이 혼합되어 채워집니다.

모든 파일 (* .scala 파일, 실제로는 지정하지 않아도 됨) (지정된 디렉토리 및 모든 기본 FS 분기 (재귀 적으로))을 자동으로 리팩터링하고 모든 탭을 이중 공백으로 바꿉니다. 클래식 Unix / GNU 도구를 사용하여 쉽고 아름다운 방법이 있지만이 분야에 대한 경험이 부족합니다. 도와 주실 래요?

답변:


9

재귀 적으로 expand(이 목적으로 만들어진)find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

나는 그것을 할 것 sed또는 perl(Sardathrion의 답변을 참조)가 인라인 편집을 지원하기 때문에,하지만 난 '좋은 똑똑한를 언급하고 싶었 expand어쨌든.

편집 : 그럴 것입니다 find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


첫 번째 변형은 예상대로 작동합니다. 두 번째 (perl) 변형은 탭을 두 개가 아닌 한 개로 만 바꿉니다.
Ivan

예, 죄송합니다. 형식이 잘못되었습니다. 소스 코드에는 공백이 2 개 있지만 렌더링 된 HTML에는 1 개만 표시됩니다.
janmoesen

10

이것은해야합니다 :

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

참고 : 이것은 테스트되지 않았습니다.


1
이것은 아직 재귀 적이 지 않습니다. 재귀 find를 지원하는 쉘 또는 쉘을 사용할 수 있습니다 **/*.scala.
janmoesen

재귀적인 행동을 추가하도록 수정되었습니다 ...
Sardathrion-SE 남용에 대해

홍보하지 마십시오 find | xargs. find -exec대답에서 언급 한 것처럼 대신 사용하십시오 . 더 쉽고 안전합니다.
janmoesen

이것을 시도했지만 결과는 없습니다. 이 명령은 즉시 반환되며 파일 내부에는 아무런 변화가 없습니다.
Ivan

이것은 테스트되지 않았지만 요점은 작동합니다.
Sardathrion-남용에 대하여
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.