기이;
외장 하드 드라이브에서 스크립트를 실행하고 tar.gz로 끝나는 각 폴더를 .app
자체 아카이브에 저장하고 싶습니다. 즉, 하나의 tar.gz 파일에 모두 넣고 싶지 않고 각 폴더마다 하나씩 만들고 싶습니다.
다음을 통해 처리할 폴더 목록을 생성할 수 있습니다.
find /Volumes/External1 *.app -prune -print
이제 이들 각각을 자체 아카이브에 압축하고 싶습니다.
두 번째 부분은 아카이브를 포함하여 드라이브에 있는 모든 파일과 기타 모든 항목을 복사하고 관련 폴더는 제외하고 모두 다른 위치에 복사하고 싶다는 것입니다.
추가 정보
내 네트워크의 파일 서버 역할을 할 Linux Raid Box를 만들었습니다. 저는 주로 Apple과 Linux 장치를 사용하지만 가끔 연결할 수 있는 Windows 장치도 있습니다.
제가 계속 겪고 있는 문제는 OSX .app 파일이 실제로는 폴더이고 기본 구조가 복잡하다는 것입니다.
저는 네트워크에 있는 모든 드라이브를 수집하여 파일 서버에 백업해 왔습니다. 나는 보통 OSX 머신에서 MD5 해시를 실행하고 Linux에서는 MD5DEEP를 사용하여 해시를 확인합니다.
실제 문제는 .app 폴더를 처리할 때 디렉터리 수와 파일 크기가 거의 일치하지 않는다는 것입니다. 이 폴더 중 하나에 도달하는 경우를 제외하고 다른 모든 항목은 완벽하게 일치합니다.
모든 것을 단순화하기 위해 지금 하려는 작업은 각 .app 폴더에 대해 tar.gz 파일을 만들고 이를 현재 위치(즉, .app 폴더와 동일한 위치)에 보관하는 것입니다. tar 파일을 저장하겠습니다. 대신 .app 폴더가 아닙니다. 이렇게 하면 쉽게 해시하고, 복사하고, 다시 해시할 수 있는 단일 파일이 됩니다.
마침내 생성에 사용할 수 있는 파일 목록을 찾았습니다.
find /Volumes/External1 -name *.app -prune -print
마지막 두 단계
1. 아카이브 생성
이것이 나의 첫 번째 난제입니다. 이 모든 폴더에 대한 아카이브를 만들고 싶지 않습니다. 폴더당 하나의 아카이브를 원합니다. 그러면 생성된 목록에서 확장하여 별도로 생성된 아카이브에 목록을 푸시하려면 어떻게 해야 합니까?
2. 드라이브에 있는 모든 것을 이동하세요
드라이브는 Mac OSX(저널링)로 포맷되었으므로 실제로 외부 드라이브를 Linux 상자에 연결하는 대신 기가비트 네트워크를 통해 파일을 이동할 것입니다(로깅을 끄는 방법/해킹이 있다는 것을 알고 있습니다. 다음을 따르십시오. 다음): 복사한 다음 다시 엽니다. 그러나 이것이 미치는 영향을 모르므로 밤새도록 실행하고 싶지 않습니다.)
복사 명령을 생성할 때(양 끝의 터미널에서 이 작업을 수행할 수 있음) 기본적으로 복사된 명령줄을 일치시키고 싶습니다.
- 다음을 제외한 모든 유형의 드라이브에 있는 파일 및 폴더
- 폴더 이름은 ".app"으로 끝납니다.
- 해당 폴더에 있는 파일이나 폴더가 아닙니다.
- 아카이브를 포함해야 합니다.
이를 위해 나는 다음을 생각해 냈습니다.
find /Volumes/External1/ | grep -v '.app/'
직접 사용해도 되고, 파일로 보내서 목록으로 사용해도 됩니다. 나는 파일 목록이 "이것이 내가 한 일이다"라고 어느 정도 알려주기 때문에 더 좋다고 생각합니다.
내 생각
모든 .app 폴더의 파일 목록 생성(목록 1)
find /Volumes/External1/ -name *.app -prune -print > files.apps.list
목록 1의 각 폴더를 아카이브로 압축하는 스크립트를 실행합니다(원본 폴더는 그대로 유지).
당신의 도움에 감사드립니다
.app 폴더를 제외한 두 번째 파일 목록 생성(목록 2)
find /Volumes/External1/ | grep -v '.app/' > files.noapps.list
목록 2의 스크립트를 실행하여 네트워크를 통해 각 파일 이동
다시 한 번 도움을 주셔서 감사합니다.
find
두 단계 모두 내가 사용할 수 있는 목록을 확장하고 -exec
각 단계 에서 tar
생성할 수 있다고 생각 cp
하지만 지금 당장은 어떻게 함께 구성해야 할지 모르겠습니다.
미리 감사드립니다
답변1
find
아카이버가 실행 되었습니다 .
find /Volumes/External1/ -name *.app -prune -exec script_to_archive_and_move {} \;
그 중에는 script_to_archive_and_move
이름을 .app
인수로 사용하여 보관한 다음 보관 파일을 최종 대상으로 이동하는 실행 파일이 있습니다. 이 접근 방식을 사용하면 find
두 번째 명령이 전혀 필요하지 않습니다.