홈 디렉터리의 모든 디렉터리와 파일에 대해 md5 해시를 생성해야 합니다. 제가 성공하지 못하는 유일한 이유는 경로에 공백이 있는 파일을 해결하는 방법을 찾는 것입니다.
나는 재귀 목록을 만들기 위해 find를 사용하고 있습니다. (저는 find가 이 작업을 수행하는 가장 좋은 방법이라는 것을 읽었습니다.)
c5-26-1# find /root/newdir
/root/newdir
/root/newdir/1
/root/newdir/2
/root/newdir/3
/root/newdir/4
/root/newdir/5
/root/newdir/newdir2
/root/newdir/newdir2/1
/root/newdir/newdir2/2
/root/newdir/new
/root/newdir/dir
/root/newdir/new dir
md5를 사용하여 이것을 시도하면 두 가지 다른 결과가 나타납니다. 둘 다 작동하지 않습니다.
c5-26-1# md5 $(find /root/newdir) # same outcome using for loop
MD5 (/root/newdir) = bc79a580f6c932937f6fcd454747db72
MD5 (/root/newdir/1) = 94ca98295946310ce88e185ea57486d5
MD5 (/root/newdir/2) = 8432051f64459be5a5e73dc2abd91795
MD5 (/root/newdir/3) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/4) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/5) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2) = 722165901468b9596dbdddfe118759fb
MD5 (/root/newdir/newdir2/1) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2/2) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (/root/newdir/dir) = 148538718feba14839f5d1072854c5f4
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (dir) = 148538718feba14839f5d1072854c5f4
또는
c5-26-1# find -X /root/newdir | xargs md5
find: /root/newdir/new dir: illegal path
MD5 (/root/newdir) = bc79a580f6c932937f6fcd454747db72
MD5 (/root/newdir/1) = 94ca98295946310ce88e185ea57486d5
MD5 (/root/newdir/2) = 8432051f64459be5a5e73dc2abd91795
MD5 (/root/newdir/3) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/4) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/5) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2) = 722165901468b9596dbdddfe118759fb
MD5 (/root/newdir/newdir2/1) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2/2) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (/root/newdir/dir) = 148538718feba14839f5d1072854c5f4
공백이 있는 디렉토리를 어떻게 해석하나요?
답변1
xargs
일반 도구가 생성하지 않는 매우 구체적인 방식으로 입력이 참조될 것으로 예상하기 때문에 거의 유용하지 않습니다. 아시다시피 mycommand $(find …)
이것은 먼저 모든 파일 이름을 연결한 다음 공백으로 분할하기 때문에 좋지 않습니다.
참조해야 하는 중간 쉘 없이 실행 되도록 하려면 -exec
main of를 사용하십시오 . 구현이 합리적으로 최신 인 경우 인수 배치당 한 번씩 프로그램을 호출하는 잘 알려진 작업을 수행하도록 할 수 있습니다.find
md5
find
xargs
md5
find /root/newdir -type f -exec md5 {} +
find
지원하지 않는 -exec … {} +
경우 로 +
바꾸십시오 \;
. 이렇게 하면 각 파일이 차례로 호출됩니다 find
. md5
약간 느리지만 어디서나 사용할 수 있습니다.
답변2
왜 그냥 사용하지 않는가?md5 깊이이것이 바로 이 작업을 수행하는 도구인가요? 대부분의 Linux 배포판에는 일반적으로 md5deep
.
답변3
-exec
스위치를 사용하시면 find
자동으로 이스케이프 처리가 될 것 같습니다.