Chắc hẳn trong chúng ta, không ít lần có nhu cần cần copy folder từ chỗ này sang chỗ khác trên google drive. Khác với việc copy trên PC, google drive chỉ cho phép copy file.
Tôi cũng không hiểu sao google không cho copy thư mục
Tôi tra trên mạng thì có khá nhiều cách, hoặc là các bạn dùng sức cơm đó có thể là download thư mục đó về và lại up lên, hoặc là sử dùng extension bên thứ 3. Tôi đoán hầu hết các bạn dùng cách sử dụng extension bên thứ 3 vừa nhanh vừa dễ. Nhưng đối với folder là tài liệu dự án, việc sử dụng bất kì phần mềm bên thứ 3 là một điều cần tránh vì lí do bảo mật.
Vậy nên hôm nay, tôi xin giới thiệu một cách khác, có thể mất chút thời gian cài đặt ban đầu, nhưng sau đó mỗi lần các bạn muốn copy thư mục thì chỉ cần 2, 3 thao tác nhẹ là được.
Nội dung bài viết
- Cài đặt
- Sử dụng
1. Cài đặt
Chúng ta sẽ sử dụng Google Apps Scripts. Đối với những bạn lập trình có lẽ sẽ dễ hiểu hơn, các bạn thuộc các ngành khác cũng không phải lo ngại vì đơn giản chỉ cần copy đoạn code của mình là ok nhé
Google Apps Script – là 1 ngôn ngữ lập trình dựa trên Javascript với trình biên tập, biên dịch đều nằm trên máy chủ của Google. Với công cụ này bạn có thể lập trình để thao tác, can thiệp trực tiếp đến các dịch vụ của Google.
Các bạn vào trang https://script.google.com/, vì là dịch vụ của google nên các bạn đăng nhập bằng tài khoản google nhé. Sau khi đăng nhập xong, các bạn nhấn vào nút New Project
Sẽ mở sang màn hình mới, các bạn copy đoạn code tôi có để bên dưới ảnh và thêm vào như hình bên sau:
Sau khi thêm code xong, các bạn nhớ Ctrl S
để save, đồng thời thêm tên project tùy ý.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class="token keyword">function</span> <span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> sourceFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<sourceFolderID>"</span><span class="token punctuation">;</span> <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<destFolderID/namefolder>"</span><span class="token punctuation">;</span> <span class="token keyword">var</span> source <span class="token operator">=</span> DriveApp<span class="token punctuation">.</span><span class="token function">getFolderById</span><span class="token punctuation">(</span>sourceFolder<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//var target = DriveApp.createFolder(targetFolder); // copy về driver của mình</span> <span class="token keyword">var</span> target <span class="token operator">=</span> DriveApp<span class="token punctuation">.</span><span class="token function">getFolderById</span><span class="token punctuation">(</span>targetFolder<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// copy về một folder xác định bằng ID</span> <span class="token function">copyFolder</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">copyFolder</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> target<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> folders <span class="token operator">=</span> source<span class="token punctuation">.</span><span class="token function">getFolders</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> files <span class="token operator">=</span> source<span class="token punctuation">.</span><span class="token function">getFiles</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span>files<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">var</span> file <span class="token operator">=</span> files<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> file<span class="token punctuation">.</span><span class="token function">makeCopy</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">while</span><span class="token punctuation">(</span>folders<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">var</span> subFolder <span class="token operator">=</span> folders<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> folderName <span class="token operator">=</span> subFolder<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> target<span class="token punctuation">.</span><span class="token function">createFolder</span><span class="token punctuation">(</span>folderName<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">copyFolder</span><span class="token punctuation">(</span>subFolder<span class="token punctuation">,</span> targetFolder<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Sẽ có nhiều option cho các bạn lựu chọn trong việc copy, nhưng ở đây mình giới thiệu 2 option mình hay dùng :
- Copy về chính drive của mình.
- Copy về một thư mục khác mà các bạn có quyền modify.
2. Sử dụng
1. Copy về chính drive của mình
Trong đoạn code trên, có 2 phần quan trọng đó là
1 2 3 | <span class="token keyword">var</span> sourceFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<sourceFolderID>"</span><span class="token punctuation">;</span> <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<destFolderID/namefolder>"</span><span class="token punctuation">;</span> |
- sourceFolderID là ID của folder mà các bạn muốn copy
- destFolderIDlà ID của folder đích mà các bạn muốn copy tới, các bạn tạm thời bỏ qua.
- namefolder là tên của folder mà các bạn muốn đặt cho folder copy
sau khi nó lưu về My folder của các bạn.
Đầu tiên, các bạn vào trong folder cần copy để lấy ID. Trong ví dụ này, mình giả sử muốn copy thư mục album1
về My drive.
Thay vào phần <sourceFolderID>
1 2 | <span class="token keyword">var</span> sourceFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"15yg-jIdQO5RLv7lyT54ehZOg_sQBPKyj"</span><span class="token punctuation">;</span> |
Sau đó phần targetFolder
sẽ điền tên tùy các bạn ví dụ
1 2 | <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"album anh"</span><span class="token punctuation">;</span> |
Lúc này, các bạn sẽ cần thay đổi một chút trong đoạn code trên : bỏ comment – 2 dấu //
khỏi dòng 1 và thêm 2 dấu này vào trong thứ 2 như bên dưới.
1 2 3 | <span class="token keyword">var</span> target <span class="token operator">=</span> DriveApp<span class="token punctuation">.</span><span class="token function">createFolder</span><span class="token punctuation">(</span>targetFolder<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// copy về driver của mình</span> <span class="token comment">//var target = DriveApp.getFolderById(targetFolder); // copy về một folder xác định bằng ID</span> |
Sau khi xong, hãy nhấn Ctrl S
để lưu code. Bước cuối cùng là nhấn Start
như hình dưới và chờ đợi.
Khi nào thông báo bên dưới tắt là coi như đã chạy xong.
Các bạn thử vào My Drive
kiểm tra nhé
2. Copy về một thư mục khác mà các bạn có quyền modify
Mình xin giới thiệu option thứ 2. Quay lại đoạn code về source và target
1 2 3 | <span class="token keyword">var</span> sourceFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<sourceFolderID>"</span><span class="token punctuation">;</span> <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"<destFolderID/namefolder>"</span><span class="token punctuation">;</span> |
Lúc này, các bạn vẫn vào trong folder cần copy để lấy ID và thay vào phần <sourceFolderID>
1 2 | <span class="token keyword">var</span> sourceFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"15yg-jIdQO5RLv7lyT54ehZOg_sQBPKyj"</span><span class="token punctuation">;</span> |
Sau đó, vào thư mục đích – là thư mục các bạn muốn copy tới để cũng lấy ID và thay thế phần destFolderID
. Ví dụ mình muốn copy folder album1
sang folder videos
1 2 | <span class="token keyword">var</span> targetFolder <span class="token operator">=</span> <span class="token double-quoted-string string">"1DyR4IlV2rXbZaW1rEUddC_p1bz2KCG8W"</span><span class="token punctuation">;</span> |
Lúc này, đoạn code copy sẽ như sau.
1 2 3 | <span class="token comment">//var target = DriveApp.createFolder(targetFolder); // copy về driver của mình</span> <span class="token keyword">var</span> target <span class="token operator">=</span> DriveApp<span class="token punctuation">.</span><span class="token function">getFolderById</span><span class="token punctuation">(</span>targetFolder<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// copy về một folder xác định bằng ID</span> |
Tương tự như phần trên các bạn save và start code, chờ đợi copy và check hàng nhé.
Lưu ý : Trong option 2, sẽ copy nội dung bên trong của folder album1. Ví dụ trong album1, các bạn có 2 file ảnh thì nó sẽ chỉ copy 2 file ảnh thôi. Còn thư mục album1 sẽ không dc bê sang. Do đó, hãy tạo folder chứa nội dung của folder album1 trước, lấy ID đó là sourceID và ID của album1 là targetID.
Từ lần sau trở đi, các bạn chỉ việc thay đổi sourceID
, targetID
và 2 dòng code liên quan đến copy của 2 option là ok.
Cảm ơn các bạn đã đọc bài. Nếu có gì khó hiểu, hãy comment bên dưới nhé.