두 시스템 모두에서 개발하는 C++ 프로젝트를 위해 CentOS와 Windows 간에 전환할 수 있어야 합니다. Unix에서 Dos로 특정 유형(예: *.cpp, *.h 또는 *.txt)의 모든 파일을 변환할 수 있기를 원합니다.
단일 파일을 변환하는 bash 스크립트가 있지만 파일 유형의 확장자 또는 *.FILETYPE만 입력하여 해당 유형의 특정 디렉토리에 있는 모든 파일을 변환할 수 있기를 원합니다.
다음은 작업 스크립트입니다. 한 번에 여러 파일에서 작동하도록 하려면 어떻게 해야 합니까? for 루프를 사용해 보았으나 구문 오류가 발생했습니다.
#! /bin/sh
# Convert a text based file from Unix Format to Dos Format
# The Output file should be the name of the input file with
# WF inserted before the file extention
#
# Examples
# convert Unix format abc.txt to abcWF.txt Windows Format
# convert Unix format abc.cpp to abcWF.cpp Windows Format
echo "In u2w FileToConvert = $1"
FileBase=$(basename $1)
FileExtension="${FileBase##*.}"
FileBase="${FileBase%.*}"
OutputSuffix="WF.$FileExtension"
OutputFile="$FileBase$OutputSuffix"
commandment="unix2dos -n $1 $OutputFile"
echo $commandment
unix2dos -n $1 $OutputFile
echo "diff -w $1 $OutputFile"
diff -w "$1" "$OutputFile"
exit
예제 실행
$ bd2w TestResults.txt
In u2w FileToConvert = TestResults.txt
unix2dos -n TestResults.txt TestResultsWF.txt
unix2dos: converting file TestResults.txt to file TestResultsWF.txt in DOS format ...
diff -w TestResults.txt TestResultsWF.txt
답변1
유닉스에서 DOS로
*.h
예를 들어 모든 파일을 DOS 형식으로 변환하려면 다음을 수행하십시오 .
sed -i '/\r/! s/$/\r/' *.h
이 조건은 /\r/!
sed에게 이미 캐리지 리턴이 있는 모든 줄을 건너뛰도록 지시합니다. 따라서 동일한 파일에서 이 명령을 여러 번 실행하는 것이 안전합니다.
바꾸기 명령은 s/$/\r/
각 줄의 끝에 캐리지 리턴 문자를 추가합니다.
이 옵션은 -i
sed에게 파일을 제자리에서 변경하라고 지시합니다. 원본의 백업을 유지하려는 경우:
sed -i.bak '/\r/! s/$/\r/' *.h
DOS에서 UNIX로
*.h
모든 파일을 DOS에서 Unix로 내부 변환하려면 :
sed -i 's/\r$//' *.h
이 명령은 동일한 파일에서 여러 번 안전하게 실행할 수도 있습니다.
운영 체제/BSD
BSD(OSX) sed의 경우 options 인수는 -i
선택 사항이 아니라 필수입니다. 따라서 -i.bak
확장 프로그램을 사용하여 백업을 만들 .bak
거나 -i ''
백업을 만들지 않고 파일을 제자리에서 변경하는 데 사용할 수 있습니다.
답변2
find
변환할 파일 검색 및 추가 -exec
(또는 ) 작업을 사용하여 변환 프로그램을 실행합니다 -execdir
. 예를 들어 bd2w
현재 디렉터리에서 시작하는 .cpp
모든 파일에 대해 실행 하려면 .h
다음 명령을 사용합니다.
find . -type f -name "*.cpp" -o -name "*.h" -exec bd2w '{}' \;
나는 위의 논평자가 표현한 우려에 동의한다고 말해야 합니다. 당신의 경험이 당신의 삶을 불필요하게 어렵게 만들지 않습니까? 당신이 유일한 개발자이더라도 코드가 서로 다른 두 컴퓨터에 있다면 로컬에서 git을 설정하는 것이 좋습니다. 이동식 장치에 저장소를 배치하면 소스를 푸시/풀할 수 있습니다. 이렇게 하면 두 컴퓨터 모두에서 소스를 최신 상태로 유지하려고 할 때 오류가 발생하지 않습니다.그리고여러분의 코딩 문제를 해결해 드립니다.