일주일에 한 번 내 Google 드라이브의 전체 폴더를 복제해야합니다. 폴더에는 약 25 개의 파일이 있습니다. 이 작업을 수행하는 쉬운 방법은 무엇입니까?
일주일에 한 번 내 Google 드라이브의 전체 폴더를 복제해야합니다. 폴더에는 약 25 개의 파일이 있습니다. 이 작업을 수행하는 쉬운 방법은 무엇입니까?
답변:
PC에서 Google 드라이브 애플리케이션을 사용중인 경우 폴더를 Google 드라이브 디렉토리에 복사하여 붙여 넣으면 복사됩니다. 웹 응용 프로그램 에서이 작업을 수행 할 수 있다고 생각하지 않습니다.
이 문제를 해결하기 위해 앱 스크립트를 작성했습니다. 폴더 내용 및 구조를 복사 할 수 있습니다. 스크립트를 사용하면 Google 드라이브 데스크톱 앱이 필요하지 않습니다. 트리거를 추가하여 프로세스를 자동화 할 수도 있습니다.
참고 :
_copy
모든 하위 폴더에 접미사 를 추가합니다folder_you_want_copied_copy
당신이 당신의 드라이브의 하위 폴더를 복사 그래서 만약이 최고 수준에 거품까지 복사 할 때, 당신의 Google 드라이브의 가장 높은 상위 계층에Google 드라이브 웹 인터페이스에있는 경우 ...
새 폴더를 만들고 원하는 이름을 지정하십시오.
기존 폴더로 이동하여 모든 파일을 선택하고 마우스 오른쪽 단추를 클릭 한 후 사본을 누르십시오.
모든 사본을 선택하고 마우스 오른쪽 버튼을 클릭 한 후 이동을 누르십시오. 새 폴더를 선택하십시오.
복사하려는 폴더에 하위 폴더가 있으면이 방법이 작동하지 않습니다.
OP에 대한 매우 늦은 답변이며, 요청 당시에는 가능하지 않다고 생각하지만 이것이 오늘날의 일입니다.
참고 : 이것은 작은 압축 파일을 만드는 작은 파일과 하위 폴더가 많을 때의 솔루션입니다. 전체 압축 파일 크기가 커질수록 유용성이 줄어 듭니다.
Lucky 711 과 같이 제 자신의 스크립트를 작성 하지 않은 한, 제 3자가 내 드라이브에 액세스하는 것을 금지하고 싶습니다 . 앞으로 Google 검색 모험가를 위해 여기에 남겨 둡니다. 폴더와 모든 내용이 복사됩니다. 유스 케이스의 경우 복사 된 폴더를 새 부모로 추가하여 여러 부모가있는 파일을 처리하도록 작성했습니다. 원하지 않으면 "이 부모가 아닌 부모를 세십시오"부분을 삭제하십시오.
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
// Count the parents that aren't this parent
var countOfOtherParents = 0;
var parents = file.getParents();
while (parents.hasNext()) {
var parent = parents.next();
if (parent.getId() !== folderToCopyId) { countOfOtherParents++; }
}
// If it's unique, then copy it. Otherwise, just add it to the new parent.
if (countOfOtherParents == 0) {
file.makeCopy(file.getName(),newFolder);
} else {
newFolder.addFile(file);
}
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
참고로 새 폴더를 다른 부모로 추가하는 대신 여러 부모가있는 파일의 새 복사본을 만들려면 짧은 코드는 다음과 같습니다.
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(),newFolder);
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
1jVlkj------------------------Gk3D7
모든 대시가 문자 인 것을 제외하고는 아마도 같은 것일 수 있습니다. 그 횡설수설 문자열은 Google이 할당 한 고유 ID입니다. 세 개의 입력이 있으면 다른 함수 에서이 함수를 다음과 같이 호출합니다.copyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
회선 만 복사하면 됩니다. 유스 케이스의 경우, 파일의 새 사본을 작성하는 대신 해당 파일이 다른 상위를 가져 오도록 명시 적으로 원했습니다. 다른 폴더를 여는 하이퍼 링크로 작동하는 파일을 의미한다면, 그렇게 할 수 있다는 것을 몰랐습니다.
Google 스프레드 시트에 " 폴더 복사 "애드온을 사용할 수 있습니다 .
Add-ons > Get add-ons
하고 '복사 폴더'부가 기능을 추가하십시오` 비디오 자습서를 참조하십시오 .
또는 이 크롬 웹 스토어 Google App Script 를 사용하여이 결과를 얻을 수 있습니다. Google 스프레드 시트를 만들 필요는 없습니다.
여러 대의 컴퓨터를 사용하고 모든 컴퓨터에 드라이브 앱을 배치하고 싶지 않으므로 사이트에 복사하기 위해 아래 스크립트를 작성했습니다. 추악하고 기본이지만 작동합니다. 하위 폴더가 아닌 폴더와 파일 만 복사합니다. 나는 개선의 여지가 있다고 확신하므로 자유롭게 가져 와서 개선하십시오. 그러나 최소한 처음부터 도움이되기를 바랍니다.
아래의 의견에 따라 Google Apps Script입니다. 이를 사용하는 방법은 Google 스크립팅 앱을 연 다음 모든 코드를 복사하여 빈 스크립트에 붙여 넣는 것입니다. 그런 다음 메뉴에서 게시 옵션을 클릭 한 다음 웹 앱으로 배포를 선택하십시오. 그런 다음 최신 코드 링크를 클릭하거나 URL을 복사하여 브라우저에 붙여 넣을 수 있습니다. 그런 다음 복사 할 폴더를 입력 할 수있는 상자와 복사 버튼이 있습니다. 이름을 지정한 폴더와 그 안에있는 모든 파일의 복사본을 만들어야합니다.
참고 : 하위 폴더는 복사하지 않고 파일 만 복사합니다.
function doGet()
{
// Build UI
// Create UI object
var copyUI = UiApp.createApplication();
// Create Input box referenced later by the name explicitly set below
var userInput = copyUI.createTextBox().setName("textbox1");
//create button
var enterButton = copyUI.createButton("copy");
// add all objects to UI object
copyUI.add(userInput).add(enterButton);
//Create clicke event handeler and add input field to handeler
var clickHandler = copyUI.createServerHandler('onClick')
.addCallbackElement(userInput);
// add handelrer to the copy button
enterButton.addClickHandler(clickHandler);
// instantiate GUI
return copyUI;
}
function onClick(e)
{
// call currently active application/gui
var app = UiApp.getActiveApplication();
//Pass in the value of the e paramater named 'textbox1'
var input = e.parameter.textbox1;
// log value passed in from user input
//Logger.log(input);
// perform file copy
CopyFile(input);
}
function CopyFile(filename)
{
// declaire variables
var newFolder_String;
var newFolder;
var originalFolder;
var fileArray;
var loopCount;
var arrayLength;
var newFile;
// get original folder id
originalFolder = DocsList.getFolder(filename);
Logger.log(originalFolder.getId());
// create new "copy" folder using: createFolder(<filename>_copy)
newFolder_String = filename + "_Copy";
Logger.log(newFolder_String);
newFolder = DocsList.createFolder(newFolder_String);
// get folders and files from original file using:
// getFiles() from original file into an array
fileArray = originalFolder.getFiles();
// Copy files into folder:
arrayLength = fileArray.length;
loopCount = 0;
// looping through array of file
for (loopCount = 0; loopCount < arrayLength; loopCount++)
{
// create file copies using: file[i].makeCopy() and newFile.addToFolder(CopyFolder)
newFile = fileArray[loopCount].makeCopy();
Logger.log(newFile.getName());
newFile.addToFolder(newFolder)
}
}
폴더를 복제하려면 Ctrl 키를 누른 상태에서 다른 폴더로 폴더를 끌어다 놓습니다.
이것은 매우 훌륭한 Google Script Macros 앱입니다 : https://script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
실시간 로그 및 폴더 선택기와 함께.