A personal journal.

Membereskan Shared Link Google Drive Sekaligus!

Published on: 20/06/2024 • Updated on: 14/05/2025 • 2 min read

Saya sempat mencari cara dengan menggunakan rclone karena saya pengguna berat program ini, namun setelah membaca dengan teliti, ternyata rclone tidak mendukung modifikasi ini. Saya pun berlanjut mencoba mencari client CLI lain yang bisa saya gunakan untuk menghilangkan properti ini dari file saya. Nihil.

Kalau tidak salah, suatu malam, saya tidak sengaja berselancar dan menemukan sebuah blog, di mana penulisnya ingin mengubah hal yang sama, namun spesifik pada pengguna tertentu. Di dalam tulisannya, dia menggunakan sebuah layanan dari Google, yaitu Google App Script. Itu adalah menu baru bagi saya.

Jika ada yang bertanya di mana saya menemukan tulisan itu, saya tidak ingat. Kebetulan waktu itu saya sudah mengantuk dan Firefox Android saya sedang dalam mode Pribadi. Bagi kalian yang tidak tahu, manajemen memori di Firefox masih jelek hingga sekarang. Laman yang baru saja kamu buka, ketika kamu tidak sengaja membuka notifikasi chat dari orang lain (misalnya, intinya kamu membuka hal lain selain Firefox), maka laman Anda akan dipaksa untuk dimuat ulang.

Langsung saja, kamu bisa membuka Google Apps Script pada akun yang kamu gunakan, dan buat sebuah skrip baru. Sedikit disclaimer, saya tidak membaca dan belajar jauh mengenai pembuatan skrip pada Google Apps Script ini, dan sedikit tebak-tebakan, googling apa yang saya butuhkan. Sehingga kualitas kode saya mungkin perlu dipertanyakan.

// Buat fungsi untun menghapis public ink secara recursif entah file atau folder
function removePublicLinks(folder) {
  if (folder.getSharingAccess() !== DriveApp.Access.PRIVATE) {
      // Log
      Logger.log("Folder " + folder.getName() + " is public, removing link.");
      // buat foldernya jadi privat
      folder.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);
  }
  // Proses files yang ada di folder saat ini:
  // Ambil semua file
  var files = folder.getFiles();
  // Loop ke file file berikutnya
  while (files.hasNext()) {
    // File yang mau diproses sekarang
    var file = files.next();
    // Log lagi ngapain file
    // Logger.log("Processing file: " + file.getName());
    // Cek apakah punya public link
    if (file.getSharingAccess() !== DriveApp.Access.PRIVATE) {
      Logger.log("Removing public link from file: " + file.getName());
      // Buat filenya privat
      file.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE);
    }
  }

  // subfolder dong
  // ambil semua subfolders, formatnya sama seperti file
  var subfolders = folder.getFolders();
  // Loop
  while (subfolders.hasNext()) {
    // subfolder yang mau di proses
    var subfolder = subfolders.next();
    // Log supaya tahu lagi dimana
    Logger.log("Entering folder: " + subfolder.getName());
    // rekursif hapus permission
    removePublicLinks(subfolder);
  }
}

// real program, ganti idnya dengan folder id yang ada di url ketika dibuka di browser:
removePublicLinks(DriveApp.getFolderById("9a8s0d98ASDU3I914_9asd87f8ass7d"));

Simpan, dan jalankan. Tunggu hingga selesai, dan jika masih ragu sebenarnya ada logging di atas supaya lebih chatty, tapi intinya tinggal nunggu saja semua selesai.

Semoga bermanfaat!