xargs 및 < 및 >를 동일한 파일에 추가

xargs 및 < 및 >를 동일한 파일에 추가

git stripspace모든 빌드(또는 사전 커밋 또는 수동)에서 모든 소스 코드 파일을 실행하여 불필요한 공백을 제거한 다음 표준 방식으로 코드 형식을 지정하고 싶습니다 .

그래서 나는 다음과 같은 것을하고 싶습니다

git stripspace < project/code.m > project/code.m

find -exec그래서 나는 or을 사용할 수 있어야 한다고 생각했지만 'git Stripspace'를 좋아하지 않는 xargsfind같습니다(아마도 < 또는 > 사이의 공백 때문일 것입니다). 그리고 동일한 파일 이름, 동일한 매개변수를 전달하는 방법을 모르겠습니다. 연속으로 두 번 올바르게 리디렉션(< >)합니다.

답변1

파일을 읽기 전에 파일이 손상되었습니다. 임시 파일이나 sponge다음과 같은 유틸리티를 사용해야 합니다 .더 많은 유틸리티.

이 경우에는 또는 을 사용할 수 없습니다 find -exec. xargs명령과 파일 이름이 포함된 셸에 인수를 전달해야 합니다. 파일 이름 토큰(파일 이름으로 대체됨)이 별도의 인수가 될 것으로 예상합니다 xargs. find대신 루프를 사용할 수 있습니다.

임시 파일 사용:

find | while read file ; do
    git stripspace < "$file" > tempfile
    mv -f tempfile "$file"
done

그리고 sponge:

find | while read file ; do
    git stripspace < "$file" | sponge "$file"
done

답변2

Ex 모드에서 Vim을 사용할 수 있습니다:

ex -sc '%!git stripspace' -cx project/code.m
  1. %모든 행 선택

  2. !명령 실행

  3. x저장하고 닫습니다

관련 정보