2010-04-12 2 views
0

중복 된 내용이 많은 CD 세트에서 파일을 복사해야합니다.이 파일은 이미 하드 디스크에 있습니다. 동일한 파일의 파일 이름은 같지 않으며 다른 이름의 하위 디렉토리에 있습니다. 중복되지 않은 파일을 CD에서 하드 디스크의 새 디렉토리로 복사하려고합니다. 하위 디렉토리는 신경 쓰지 않습니다. 나중에 다시 분류하겠습니다. 고유 한 파일 만 필요합니다.하드 디스크가 아닌 CD에있는 파일을 새 디렉토리에 복사하는 스크립트

내가 그 작업을 수행하는 소프트웨어를 찾을 수 없습니다 - 슈퍼 유저에서 슈퍼 유저 https://superuser.com/questions/129944/software-to-copy-non-duplicate-files-from-cd-dvd

사람에 내 게시물을보고 내가 GNU의 "찾기"일부 검사 도구는 Win32 버전을 사용하는 스크립트를 작성 제안했다. 나는 그걸 훑어 보았고 전에 그렇게 아무것도하지 않았다. 내가 수정할 수있는 것이 존재하기를 바라고 있습니다.

복제본을 삭제하는 좋은 프로그램이 있는데, 중복 제거 프로그램 (체크섬을 비교)이지만 모든 CD를 디스크에 복사해야하기 때문에 여기서는 도움이되지 않습니다. 각각 약 80 % 복제 할 수있는 여유가 없습니다. 모든 것을 복사 한 다음 몇 번에 걸쳐 순환시켜야하고, 그 중 80 %가 돌아 서서 삭제되어 하드 드라이브를 많이 사용해야합니다.

도움 주셔서 감사합니다.

+0

나는이 질문을 잘 알고 있었다. –

답변

0

저는 Windows를 사용하지 않지만, GNU find과 Lua 스크립트의 조합을 제안 할 것입니다. 당신의 GNU 소프트웨어가 다음은 동등하지만 훨씬 빠를 수 있습니다 xargs 포함 된 경우 find 위해 당신은

find/-exec md5sum '{}' ';' 

을 시도 할 수 있습니다 :

find/-print0 | xargs -0 md5sum 

이 당신에게 체크섬과 해당 파일 이름의 목록을 제공합니다. 우리는 파일 이름을 버리고 체크섬하겠습니다 :

#!/usr/bin/env lua 

local checksums = {} 

for l in io.lines() do 
    local checksum, pathname = l:match('^(%S+)%s+(.*)$') 
    checksums[checksum] = true 
end 

local cdfiles = assert(io.popen('find e:/ -print0 | xargs -0 md5sum')) 

for l in cdfiles:lines() do 
    local checksum, pathname = l:match('^(%S+)%s+(.*)$') 
    if not checksums[checksum] then 
    io.stderr:write('copying file ', pathname, '\n') 
    os.execute('cp ' .. pathname .. ' c:/files/from/cd') 
    checksums[checksum] = true 
    end 
end 

을 할 수 있습니다 후 파이프이 스크립트에

find/-print0 | xargs -0 md5um 

의 출력. 파일 이름에 특수 문자가 포함되어

  • 경우, 인용해야합니다 :

    은 몇 가지 문제가 있습니다. Windows에서 인용 규칙을 알지 못합니다.

  • 항상 찾기보다 디스크에 체크섬을 쓰는 것이 더 효율적입니다. 당신은

    local csums = assert(io.open('/tmp/checksums', 'w')) 
    for cs in pairs(checksums) do csums:write(cs, '\n') end 
    csums:close() 
    

    을 시도하고 다시 io.lines을 사용하여 파일에서 다시 체크섬을 읽을 수 있습니다.

본인이 시작할 수 있기를 바랍니다. http://lua.org에서 Lua를 다운로드 할 수 있으며, Programming in Lua이라는 멋진 책을 추천합니다 (previous edition free online 참조).