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:
- Sortowanie — przenoszenie plików do właściwych folderów na podstawie nazwy, typu MIME lub daty utworzenia.
- Archiwizacja — przenoszenie plików starszych niż X dni do folderu archiwum (zamiast usuwania).
- 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ć:
- Otwórz edytor Apps Script (script.google.com).
- Kliknij ikonę zegara (Wyzwalacze) w menu bocznym.
- 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ć.