이 App은 Google 드라이브에 있는 폴더를 복사할 수 있습니다.
먼저 홈 페이지에서 파일 복사에 대해서 살펴보세요.
폴더 복사 기능을 사용하려면 A 드라이브 그룹에 가입해야 합니다.
구글 드라이브에 있는 폴더나 파일을 공유 드라이브 (팀 드라이브)로 복사하는 앱입니다.
구글은 하루에 750기가까지 복사할 수 있도록 제한합니다.
그러나 여러 개 계정을 사용하면 원하는 만큼 복사할 수 있습니다.
구글 드라이브 무제한 용량 계정 한 개와 구글 일반 사용자용 계정 여러 개를 사용합니다.
폴더의 하위 폴더가 여러 개이고 많은 파일을 포함하고 있어 750기가 이상일 때 공유 드라이브로 복사하기를 권장합니다.
공유 드라이브에 복사본 폴더 구조가 만들어지면서 파일 복사본이 저장됩니다.
공유 드라이브의 멤버끼리 파일이 공유되기 때문에 중단된 복사를 다른 멤버 계정으로 계속해서 복사할 수 있습니다.
중단된 복사를 이어서 기동시키려면 ss=폴더 작업 스프레드시트 URL을 입력해서 제출합니다.
공유 드라이브에서 복사가 끝난 폴더를 선택해서 드래그&드롭으로 무제한 용량의 내 드라이브로 이동해야 합니다.
공유 드라이브는 파일 개수에 제한이 있어서 계속해서 복사할 수 없습니다.
Google 드라이브 폴더 복사 앱을 통해서 구글 드라이브에 있는 파일을 복사할 수 있습니다.
여기서 파일은 폴더를 포함합니다. About Files and Folders
앱 사용자가 파일을 복사할 수 있는 권한이 있어야 됩니다.
파일 복사의 목적지는 구글 드라이브에 있는 사용자의 드라이브나 공유 드라이브입니다.
앱 화면의 파일 입력란에 파일 주소를 입력하고 제출 버튼을 클릭하면 복사가 시작됩니다.
파일 ID도 지원합니다.
파일 복사가 중단되었을 때 다시 시작하기 위해서 ss 명령을 지원합니다.
파일 복사 중일 때 작업을 삭제하기 위해서 del 명령을 지원합니다.
작업 과정은 로그 시트에 기록됩니다.
입력한 내용이 파일이면 바로 복사됩니다.
입력한 내용이 폴더이면 폴더명을 포함하는 폴더 스프레드시트를 생성합니다.
폴더 복사에 필요한 하위 폴더와 파일들을 여기에 기록하면서 복사합니다.
폴더 스프레드시트를 보기 위해서 화면의 로그 시트 링크를 클릭합니다.
로그 시트에서 폴더명이 포함된 스프레드시트 링크를 찾아서 클릭하면 폴더 스프레드시트를 볼 수 있습니다.
복사본이 저장되는 드라이브를 바꿀 수 있습니다.
드라이브 리스트를 클릭하면 사용자의 드라이브와 사용자가 가진 공유 드라이브를 볼 수 있습니다.
원하는 드라이브를 선택하고 변경 버튼을 클릭하여 복사본 저장소를 변경합니다.
폴더 복사를 진행하지 못하게 되면 이메일을 보냅니다.
Drive.Files.list 함수를 사용해서 폴더에 있는 자식 폴더와 파일을 얻습니다.
https://developers.google.com/apps-script/advanced/drive#listing_folders
https://developers.google.com/drive/api/v2/reference/files/list
매개 변수에 orderBy를 사용해서 정렬할 수 있습니다.
orderBy: 'folder,modifiedDate desc,title'
Query string
https://developers.google.com/drive/api/v2/search-parameters
modifiedDate > '2012-06-04T12:00:00' // default time zone is UTC
list 함수는 페이지 단위로 조회합니다.
다음 페이지를 조회하기 위해서 페이지 토큰이 필요합니다.
폴더 복사 과정에서 모든 원본 파일과 복사본 정보를 스프레드시트에 기록합니다.
developers.google.com/apps-script/reference/spreadsheet/
폴더 복사 앱의 경우 페이지 단위의 조회 결과에 폴더와 파일이 섞여 있습니다.
Mime type이 폴더이면 스택 시트에 저장하고 나머지는 파일 시트에 저장합니다.
https://developers.google.com/drive/api/v2/mime-types
https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)
페이지 토큰은 프로퍼티에 저장합니다.
https://developers.google.com/apps-script/reference/properties/properties#setpropertykey-value
모든 페이지를 시트에 저장하고 파일 시트의 파일을 순서대로 복사합니다.
복사가 끝나면 스택 시트에서 폴더를 꺼내서 지금까지 했던 리스팅과 복사를 반복합니다.
구글 앱스 스크립트는 구글 서버에서 실행됩니다.
스크립트 실행 시간은 6분이며 파일은 하루에 750 기가까지 복사할 수 있습니다.
https://developers.google.com/apps-script/guides/services/quotas#current_limitations
https://support.google.com/drive/answer/2424368
https://support.google.com/a/answer/7338880?hl=ko
리스팅 결과를 저장하고 파일을 복사하는 과정 중에 6분 제한 시간이나 하루 할당량 제한이나 버그나 서버 내부 오류로 복사가 중단될수 있습니다.
이럴 때는 로그 시트를 살펴보고 적절하게 처리해 주세요.
지금까지 복사한 것을 포기하고 복사를 다시하려면 delete 명령으로 삭제 후 작업하세요.
앱을 초기화하기 위해서 init 명령을 사용할 수 있습니다.
Google 드라이브 폴더를 트리 구조의 전위 순회로 복사하기 위해서 스택을 사용합니다.
참고: 트리 순회
https://www.youtube.com/watch?v=RCaHz14W5As
폴더를 스택을 사용해서 전위 순회로 복사하는 앱을 만든 이유는 공유 드라이브 제한 때문입니다.
수 많은 하위 폴더로 구성된 폴더를 빠르게 복사하기 위해서 여러 개 계정으로 공유 드라이브를 사용해서 이어서 복사하기를 사용합니다.
폴더 단위로 모든 하위 폴더 복사를 끝내고 다음 폴더 복사를 시작하면 복사가 완료된 폴더 단위로 공유 드라이브에서 내 드라이브로 이동할 수 있습니다.
https://www.youtube.com/watch?v=CUJLP2-LJo4
기존의 폴더 복사는 레벨 순회 순서로 복사됩니다.
참고: 단일 공유 드라이브 내에 포함 가능한 최대 항목 수
https://support.google.com/a/answer/7338880
공유 드라이브에는 최대 400,000개의 파일과 폴더가 포함될 수 있습니다.