Firmowy Dysk Google po kilku miesiącach pracy potrafi wyglądać jak piwnica po przeprowadzce — setki plików w losowych folderach, pięć wersji tej samej oferty, a najnowsza faktura gdzieś pomiędzy zrzutami ekranu z piątkowego Slacka. Zamiast poświęcać co kwartał cały piątek na ręczne przekładanie dokumentów, możesz oddelegować to zadanie skryptowi, który zrobi to za Ciebie każdego dnia o 6:00 rano.

Dlaczego ręczne porządkowanie nie skaluje się w firmie?

W małych zespołach łatwo utrzymać porządek na wspólnym dysku. Problem zaczyna się, gdy:

  • Zespół przekracza 10 osób — każdy ma swój sposób nazywania plików („oferta_fin_v3_FINAL(2).docx" brzmi znajomo?).
  • Pliki przychodzą z wielu źródeł — formularze Google, załączniki mailowe, eksporty z CRM, skany z telefonu.
  • Brak spójnej konwencji — nawet najlepsze procedury ISO nie przetrwają kontaktu z rzeczywistością dłużej niż kwartał.

Rozwiązaniem jest automatyzacja — a konkretnie Google Apps Script, czyli darmowy silnik JavaScript wbudowany w każde konto Google. Ten sam mechanizm, który wykorzystujesz do automatycznego wysyłania maili z Arkuszy Google, doskonale sprawdza się przy zarządzaniu strukturą Dysku.

Architektura skryptu: co właściwie automatyzujemy?

Dobry skrypt porządkujący Dysk Google realizuje trzy główne zadania:

  1. Sortowanie — przenoszenie plików do właściwych folderów na podstawie nazwy, typu MIME lub daty utworzenia.
  2. Archiwizacja — przenoszenie plików starszych niż X dni do folderu archiwum (zamiast usuwania).
  3. Raportowanie — generowanie podsumowania co zostało przeniesione, żeby zespół wiedział co się stało z ich plikami.

Gotowy skrypt do wdrożenia

Poniższy kod przeszukuje wskazany folder „Inbox" na Dysku i automatycznie sortuje pliki do podfolderów na podstawie rozszerzenia. Dodatkowo archiwizuje wszystko starsze niż 90 dni:

function organizeGoogleDrive() {
  // PONIŻEJ WPISZ ID SWOICH FOLDERÓW
  // Skąd wziąć ID? Wejdź w podany folder na Google Drive - ciąg znaków w URL to jego ID.
  // URL np: https://drive.google.com/drive/u/0/folders/1A2b3C... -> Twoje ID to 1A2b3C...
  const INBOX_ID = 'TUTAJ_WKLEJ_ID_FOLDERU_INBOX';  // Folder, do którego wpadają luźne pliki
  const ARCHIVE_ID = 'TUTAJ_WKLEJ_ID_FOLDERU_ARCHIWUM'; // Gdzie odkładać stare pliki
  
  // Zmienna określająca, po ilu dniach skrypt uzna plik za "stary" i go zarchiwizuje
  const DAYS_TO_ARCHIVE = 90;

  // Główny obiekt API Google Drive, łączy się z systemem po wpisanych wyżej ID
  const inbox = DriveApp.getFolderById(INBOX_ID);
  const archive = DriveApp.getFolderById(ARCHIVE_ID);
  
  // Logika obliczania czasu (dzisiejsza data minus DAYS_TO_ARCHIVE)
  const cutoffDate = new Date();
  cutoffDate.setDate(cutoffDate.getDate() - DAYS_TO_ARCHIVE);

  // Pobiera listę wszystkich plików ze wskazanego Inboxa
  const files = inbox.getFiles();
  let moved = 0, archived = 0;

  while (files.hasNext()) {
    const file = files.next();
    const name = file.getName();
    const created = file.getDateCreated();
    const mime = file.getMimeType();

    // Archiwizacja starych plików
    if (created < cutoffDate) {
      file.moveTo(archive);
      archived++;
      continue;
    }

    // Sortowanie po typie pliku
    let targetFolder = null;
    if (mime.includes('spreadsheet') || name.endsWith('.xlsx')) {
      targetFolder = getOrCreateFolder(inbox, '📊 Arkusze');
    } else if (mime.includes('document') || name.endsWith('.docx')) {
      targetFolder = getOrCreateFolder(inbox, '📝 Dokumenty');
    } else if (mime.includes('pdf')) {
      targetFolder = getOrCreateFolder(inbox, '📄 PDF');
    } else if (mime.includes('image')) {
      targetFolder = getOrCreateFolder(inbox, '🖼️ Grafiki');
    }

    if (targetFolder) {
      file.moveTo(targetFolder);
      moved++;
    }
  }

  // Raport e-mail
  if (moved > 0 || archived > 0) {
    MailApp.sendEmail(
      Session.getActiveUser().getEmail(),
      '🗂️ Raport porządkowania Dysku Google',
      `Przeniesiono ${moved} plików do podfolderów.\n` +
      `Zarchiwizowano ${archived} plików starszych niż ${DAYS_TO_ARCHIVE} dni.`
    );
  }
}

function getOrCreateFolder(parent, name) {
  const folders = parent.getFoldersByName(name);
  return folders.hasNext()
    ? folders.next()
    : parent.createFolder(name);
}

Trigger czasowy — ustaw i zapomnij

Najsilniejszą stroną tego podejścia jest możliwość ustawienia triggera czasowego (Time-Driven Trigger), który uruchomi skrypt automatycznie — np. każdego dnia o 6:00 rano, zanim ktokolwiek z zespołu zacznie pracę. To ten sam mechanizm, na którym opiera się budowa darmowego CRM w Google Sheets.

Aby go ustawić:

  1. Otwórz edytor Apps Script (script.google.com).
  2. Kliknij ikonę zegara (Wyzwalacze) w menu bocznym.
  3. Dodaj nowy wyzwalacz: funkcja organizeGoogleDrive, źródło „Sterowane czasem", częstotliwość „Dziennie", godzina „06:00–07:00".

Rozszerzenia: co jeszcze można zautomatyzować?

Porządkowanie po typie pliku to dopiero początek. W bardziej zaawansowanych wdrożeniach konfiguruje dla klientów:

  • Sortowanie po nadawcy — pliki z Gmail automatycznie lądują w folderach klientów.
  • Automatyczne nazewnictwo — np. „Faktura_[NazwaKlienta]_[Data].pdf" generowane z danych w Arkuszach podłączonych do API.
  • Wykrywanie duplikatów — porównanie hash plików i przeniesienie zdublowanych wersji do kosza.
  • Integracja z Looker Studio — dashboard pokazujący statystyki Dysku: ile plików, ile GB, trend wzrostu.
„Porządek na Dysku to nie kwestia dyscypliny — to kwestia automatyzacji. Dyscyplina kończy się w piątek po południu, a skrypt pracuje nawet w Wigilię."

Podsumowanie

Automatyczne porządkowanie Dysku Google to jedno z najprostszych wdrożeń, które daje natychmiastowy, namacalny efekt. Zamiast wydawać pieniądze na zewnętrzne narzędzia do zarządzania plikami, wykorzystujesz infrastrukturę, za którą już płacisz — Google Workspace. Jeśli chcesz, żebym skonfigurował to pod specyfikę Twojej firmy — wystarczy napisać.