GTD 스타일 시스템 에서 작업을 계획 하기 위해 org-mode 를 사용하기 시작했습니다 . 모든 조직 파일을 Dropbox 폴더 의 디렉토리에 넣고 emacs를 실행하여 Cygwin, Mac OS X 및 Debian의 세 가지 로컬 시스템에서이 파일을 편집 / 관리합니다. 또한 MobileOrg 를 사용 하여 iPad에서 이러한 조직 파일에 액세스 할 때 파일이 변경 될 때 파일을 최신 상태로 유지해야합니다. 이를 실행하여 수행 할 수 있습니다 .checksums.dat
md5sum *.org > checksums.dat
문제가 있다는 것입니다 세 가지에 대한 명령 md5sum
: 명령 md5sum.exe
의 Cygwin에서, md5
맥 OS X, 그리고 md5sum
데비안에서가. 가장 이상적인 상황은 Dropbox Foder에 저장된 makefile이며 현재 시스템에서 사용할 수있는 명령을 감지하고 해당 명령을 실행하여 md5 체크섬 작업을 수행합니다.
답변
체크섬을 생성하는 가능한 명령
불행히도, 암호화 체크섬을 생성하는 표준 유틸리티는 없습니다. CRC를 생성하는 표준 유틸리티가 있습니다 : cksum
; 이는 적대적이지 않은 환경에서 변경 사항을 감지하는 데 충분할 수 있습니다.
MD5 대신 SHA1을 사용하는 것이 좋습니다. MD5 유틸리티는 있지만 SHA1이없는 시스템은 많지 않으며 암호화 체크섬을 사용하려는 경우 알려진 방법이없는 알고리즘을 사용하여 충돌을 찾을 수도 있습니다 (크기도 확인한다고 가정).
표준은 아니지만 일반적이며 다이제스트를 계산할 수있는 도구 중 하나는 OpenSSL 입니다. Cygwin, Debian 및 OSX에서 사용할 수 있지만 불행히도 OSX에서 기본 설치의 일부는 아닙니다.
openssl dgst -sha1
OSX 10.6에는 shasum
Debian ( perl
패키지 의 일부)에도 있는 유틸리티가 있으며 Cygwin도 믿습니다. 이것은 Perl 스크립트입니다. 대부분의 유닉스 시스템에는 Perl이 설치되어 있으므로이 스크립트가 어디에서나 사용 가능하지 않을까 걱정되면 makefile과 함께 해당 스크립트를 묶을 수 있습니다.
시스템에 맞는 명령 선택
좋아, 실제로 모든 곳에서 작동하는 명령을 찾을 수 없다고 가정 해 봅시다.
껍질에서
사용하여 type
내장 된 명령을 사용할 수 있는지 확인합니다.
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
GNU 메이크
makefile이로드 될 때 shell
함수 를 사용하여 쉘 스 니펫을 실행하고 출력을 변수에 저장할 수 있습니다.
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
포터블 (POSIX) 메이크
규칙에서 쉘 명령 만 실행할 수 있으므로 체크섬을 계산하는 각 규칙에는 조회 코드가 포함되어야합니다. 스 니펫을 변수에 넣을 수 있습니다. 규칙의 개별 줄은 독립적으로 평가됩니다. 또한 $
쉘로 전달 될 부호는로 이스케이프해야한다는 점을 기억하십시오 $$
.
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
답변
그것은 해킹의 일이지만, 각각 존재하는지 테스트하고 그들이 있다면 실행할 수 있습니다.
[ -x "`which md5 2>/dev/null`" ] && md5 newfile >>sums
[ -x "`which md5sum 2>/dev/null`" ] && md5sum newfile >>sums
cygwin은을 포함 md5sum
하지 않고 명령 (을 포함하여 )을 인식 .exe
하지만 필요한 경우 포함시켜야합니다.
답변
: 당신은 이맥스를 실행하고 있기 때문에, 당신은 체크섬 계산하기 위해 자체 이맥스 사용할 수 http://www.gnu.org/software/emacs/manual/html_node/elisp/MD5-Checksum.html을 .
답변
어느 GNU의 autotools를 (코멘트에서 언급 한 바와 같이) 또는도 CMake는 옵션입니다.
GNU autotools는보다 전통적인 접근 방식이지만 (그리고 아마도 나 자신만을 위해 말하면) 사람들이 처음에 그것들을 사용하여 프로젝트를 설정할 것이라는 기대에 너무 흥분하지 않는다고 생각합니다. 어쨌든 그것은 학습 곡선입니다. CMake는 블록의 새로운 아이이며, 덜 일반적입니다 (그리고 여전히 학습 곡선이 있습니다). 자체 구문이 있으며 플랫폼에 대한 makefile을 생성합니다. CMake는 그렇게 xx 중심적이지 않다는 뚜렷한 이점이 있습니다. 그것은 유닉스, 윈도우 및 맥에서도 안정적으로 작동합니다 (예를 들어, makefile 대신에 msvc 프로젝트를 생성 할 수 있습니다).
편집 : 물론 ‘makefiles’가 제안 된 이후이 대답은 그 가정과 함께 진행됩니다. 그러나 아마도 파이썬 스크립트 또는 간단한 Java 프로그램이이 작업에 더 적합 할 것입니다. 스크립팅 / 프로그래밍 언어는 여러 플랫폼에서 동일하게 수행합니다.