Giới thiệu
Google Drive là dịch vụ lưu trữ đám mây khá phổ biến, nhất là người Việt Nam. Thông thường, đa số những người mà tôi quen biết đều sử dụng Google Drive là nơi lưu trữ dữ liệu online của họ.
Tuy nhiên, có một vấn đề mà nhiều người dùng gặp khó khăn là copy folder của Google Drive. Google Drive không hỗ trợ trực tiếp, cho nên để sử dụng chức năng này, bạn cần phải sử dụng thông qua bên thứ ba. Một số người sẽ lo ngại khi sử dụng tool không phải của Google vì lý do bảo mật.
Và có một điều đặc biệt dành cho bạn khi đọc bài viết này, bạn sẽ đảm bảo được tài khoản google của bạn vẫn an toàn và chính bạn sẽ tự làm tool copy folder Google Drive luôn. Nghe vui nhỉ? Vậy thì bắt đầu thôi.
Dưới đây là một số công cụ cần để tạo tool này:
- Google App Script.
- Script.
Ưu điểm
- Có thể chạy trên DriveTeam.
- Không copy những file đã có trong folder. Tiện trong trường hợp lỡ copy 750GB/ngày, thì mai quay lại copy tiếp 750GB nữa, không lo copy những file đã copy.
- Tự làm, tự chơi. Yên tâm về bảo mật.
Nhược điểm
- App Script chỉ có thể chạy được 6 phút đối với account gmail và 30 phút đối với account google workspace.
- Có file log hơi mất thẩm mỹ.
Thông tin
Đoạn script này mình lấy từ labnol. Tuy nhiên, mình có về xào nấu lại cho dễ sử dụng hơn.
/*
Author: Lê Văn Đông
Refer: https://www.labnol.org/code/19979-copy-folders-drive
*/
function setup(){
var src_id = "idfolder"; //Input source folder here. Đặt Folder ID của folder nguồn tại đây.
var des_id = "idfolder"; // Input destination folder here. Đặt Folder ID của folder đích tại đây.
var reset = false; // Set true if you want to scan all files again. Set false if you only want to scan the modified file. Recommend set true. Để true nếu như bạn muốn quét lại toàn bộ file, false nếu như bạn chỉ muốn quét những file đã bị sửa đổi. Khuyến khích để true, nếu bạn muốn copy đầy đủ, false nếu bạn muốn copy nhanh.
var src = DriveApp.getFolderById(src_id);
var des = DriveApp.getFolderById(des_id);
try{
copy(src,des,reset);
}
catch (e){
Logger.log("Please check src_id and des_id again!");
Logger.log("Error: " + e);
}
}
function writelog(timestamp,folder){
files = folder.getFilesByName("log.txt");
if(files.hasNext()){
files.next().setContent(timestamp);
}
else{
folder.createFile("log.txt",timestamp);
}
}
function getLog(folder){
files = folder.getFilesByName("log.txt");
if(files.hasNext()){
return files.next().getBlob().getDataAsString();
}
else{
return "1971-12-20T01:04:04.501Z";
}
}
function copy(src,des,reset){
//Create query
var query = 'modifiedDate > "1971-12-20T01:04:04.501Z"';
if(reset == false){
var time= getLog(des);
query = 'modifiedDate > "' + time + '"';
}
//Get list file and folder
Logger.log("Search file, folder");
var files = src.searchFiles(query);
var folders = src.getFolders();
while(files.hasNext()){
var file = files.next();
var namefile = file.getName();
var file_itor = des.getFilesByName(namefile);
var mimetype = file.getMimeType();
if(!file_itor.hasNext()){
Logger.log("Make copy file: " + namefile);
file.makeCopy(namefile, des);
}
else{
Logger.log( namefile + " already exists");
if((mimetype == "application/vnd.google-apps.document" || mimetype == "application/vnd.google-apps.presentation" || mimetype == "application/vnd.google-apps.spreadsheet") && (file.getLastUpdated().toISOString() > getLog(des))){
Logger.log("This document has changed!!! Don't worry, I will copy this file again!");
file_itor.next().setTrashed(true);
file.makeCopy(namefile, des);
}
}
}
while(folders.hasNext()){
var subfolder = folders.next();
var namefolder = subfolder.getName();
var folder = des.getFoldersByName(namefolder);
if(folder.hasNext()){
folder = folder.next();
}
else{
Logger.log("Create new folder:" + subfolder.getName());
folder = des.createFolder(subfolder.getName());
}
Logger.log("Go to: " + folder.getName());
copy(subfolder,folder,reset);
}
Logger.log("Write log at: " + des.getName());
writelog((new Date).toISOString(),des);
}
Hướng dẫn sử dụng
Các bạn thay _src_id_ thành ID folder nguồn. Còn _des_id_ thành ID folder đích. Sau đó, bạn nhấn Run là thành công.
- ID folder: là phần ID_folder nằm trong "_drive.google.com/drive/folders/ID_folder_?u..".
- reset: true. Mặc định sẽ là true. Để quét tất cả các file không bỏ lỡ file nào.
reset
true
false
Tốc độ
Chậm
Nhanh
Copy đầy đủ
Có
Không
Đối tượng sử dụng
Ít file, folder
Nhiều file, folder. Hoặc người đảm bảo rằng, file mới upload là file mới tạo trước ngày chạy script.
Ghi chú
- reset = false: Copy không đầy đủ, vì nó sẽ chỉ lấy những file có ngày chỉnh sửa lần cuối so với ngày cuối cùng chạy script. Nên những file đã tạo từ trước ở máy tính (có ngày tạo trước ngày lần cuối chạy script), sau này mới upload lên thì scrpit sẽ không nhận dạng được. Tuy nhiên, những file mới tạo ở máy tính upload lên thì nó vẫn copy được. Muốn biết chi tiết, các bạn có thể so sánh ngày trong file log và ngày chỉnh sửa lần cuối của file. Tốc độ copy rất nhanh.
- reset = true: Copy đầy đủ, nó sẽ scan hết tất cả các file và folder. Tốc độ copy chậm.
Lưu ý
- Bạn chỉ có thể copy tối đa 750 Gb/ngày.
- Bạn cần truy cập link được share trước để tài khoản của bạn được cấp quyền truy cập thư mục thì mới copy được.
- Có một số bạn bị lỗi Drive Limit Exceed. Mình đã test và có 2 trường hợp bị lỗi này: Một là bạn đã sử dụng hết 750GB. Hai là DriveTeam của bạn có vấn đề, bạn phải đổi DriveTeam khác để sử dụng.
Link script và demo, hướng dẫn copy script
Các bạn truy cập link Script version 2.1 để copy. Nếu không biết cách copy có thể xem video bên dưới.
Changelog
Version 1.1
Cho phép chọn thư mục đích để copy. Không copy những file đã có ở trong thư mục đích. => Chỉ copy những file chưa có thôi.
Cách sử dụng: Các bạn copy URL nguồn và URL đích. Script nó sẽ copy file từ thư mục nguồn vào thư mục đích. Những file đã có nó sẽ bỏ qua, không copy lại nữa. Nếu bạn bỏ trống link đích, nó sẽ tạo thư mục Copy of tại MyDrive.
Version 1.2
- Có log ở phần script.
- Cải thiện tốc độ duyệt.
Bạn có thể copy script ở đây.
Version 2.0
- Cải thiện lớn về tốc độ duyệt file.
- Cần bật API activity để chạy.
Bạn có thể copy script ở đây.
Version 2.1
- Viết lại script.
- Xoá API Activity.
- Cải thiện tốc độ duyệt file.
- Những file doc, slide, sheet sẽ tự động copy lại khi có thay đổi. Đảm bảo bạn luôn có phiên bản mới nhất của các file định dạng này khi copy. Vì file dạng này có thể chỉnh sửa trực tiếp trên google drive.
- Sửa lỗi không thể copy share folder.
Do hạn chế về API, nên mình kết hợp v1.2 và 2.0 lại với nhau và do bạn tự chọn cách chạy của script. reset = false là chạy theo phong cách v2.0, true là chạy theo phong cách v1.2.
Bạn có thể copy script ở đây.