IT

전체 디렉토리에서 dos2unix를 어떻게 실행할 수 있습니까?

lottoking 2020. 3. 22. 10:52
반응형

전체 디렉토리에서 dos2unix를 어떻게 실행할 수 있습니까?


를 사용하여 전체 디렉토리를 변환해야합니다 dos2unix. 이 작업을 수행하는 방법을 알 수 없습니다.


find . -type f -print0 | xargs -0 dos2unix

재귀 적으로 현재 디렉토리 내의 모든 파일을 찾고이 파일을 호출합니다. dos2unix 명령


큰 디렉토리 인 경우 여러 프로세서로 실행하는 것이 좋습니다.

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

한 번에 1 개의 파일을 전달하고 4 개의 프로세서를 사용합니다.


dos2unix가 만족스럽지 않으면 서 간단한 유틸리티를 공개했습니다. 속도와 예측 가능성의 몇 가지 장점 외에도 구문은 약간 더 간단합니다.

endlines unix *

그리고 하위 디렉토리로 이동하려면 (숨겨진 디렉토리 및 텍스트가 아닌 파일을 생략하십시오) :

endlines unix -r .

endlineshttps://github.com/mdolidon/endlines에서 사용할 수 있습니다


숨겨져있는 파일과 폴더 .git.를 사용하지 않는 것이 가장 좋습니다. 사용하는 대신 버전이 최신이거나 사용중인 경우 다음 과 같이 find하십시오 .bashzsh

dos2unix **

Bash의 경우 다음이 필요합니다.

shopt -s globstar

.... 그러나 이것은 당신이 솔직히 말해서 유용하게 사용할 수있는 충분한 기능입니다 .bashrc.

당신이 경우 하지 않는 숨김 파일 및 폴더를 제외하려면,하지만 여전히 건드리고 싶지 않아 find(내가 당신을 비난하지 않을), 당신은 일치하는 두 번째 재귀 글로브 인수 제공 할 수있는 유일한 숨겨진 항목 :

dos2unix ** **/.*

두 경우 모두 glob가 디렉토리를 포함하도록 확장되므로 다음과 같은 경고가 나타날 수 있습니다. Skipping <dir>, not a regular file.


모든 Solaris 사용자의 경우 (오전 5.10을 사용중인 경우, 다른 유닉스 시스템뿐만 아니라 최신 버전에도 적용될 수 있음) :

dos2unix는 기본적으로 파일을 덮어 쓰지 않고, 업데이트 된 버전을 stdout으로 인쇄하기 때문에 소스와 대상을 같은 이름으로 두 번 지정해야합니다.

find . -type f -exec dos2unix {} {} \;

for FILE in /var/www/html/files/*
do
 /usr/bin/dos2unix FILE
done

일반적인 유스 케이스 는 Git 저장소에 커밋 된 모든 파일의 줄 끝표준화 하는 것으로 보입니다 .

git ls-files | xargs dos2unix

특정 파일 (예를 들어 있다는 사실을 숙지 *.sln, *.bat) 등 있습니다 의 Windows 운영 체제에서 사용한다 계속CRLF 종료를 :

git ls-files '*.sln' '*.bat' | xargs unix2dos

필요한 경우 .gitattributes


나는 똑같은 문제를 겪었고 여기에서 해결 한 게시물 덕분에. 나는 약 100 개의 파일이 있다는 것을 알고 있었고 * .js 파일에 대해서만 파일을 실행해야했습니다.find . -type f -name '*.js' -print0 | xargs -0 dos2unix

도와 주셔서 감사합니다.


하위 디렉토리가없는 경우 다음을 수행 할 수도 있습니다.

ls | xargs -I {} dos2unix "{}"

참고 URL : https://stackoverflow.com/questions/11929461/how-can-i-run-dos2unix-on-an-entire-directory

반응형