Tietokoneiden näyttöjä, joissa näkyy kuvaa automaatiolaboratorion laitteistosta. Monitoreiden takana näkyy sama laitteisto kuin kuvissa.

timohei.net / Työasiaa /
Moodle-palautusten käsittelyn automatisointia

Nämä ohjeet on tehty käytettäväksi Linux-koneessa. Ne ovat sovellettavissa myös Windows-koneessa, jossa on otettu käyttöön Windows Subsystem for Linux (WSL).

Ryhmien palauttamien tiedostojen automaattinen nimeäminen

Tässä esimerkissä Moodlessa opiskelijat on jaettu ryhmiin A01—A12 ja B01—B12. Palautukset tehty ryhmissä, jolloin yhden ryhmän jäsenen tallettaessa tiedoston, se tulee näkyviin kaikkien ryhmän jäsenten palautuksena.

Palautettavien tiedostojen nimeyksestä on annettu ohje, jonka mukaan nimessä pitäisi olla ryhmän tunnus, ryhmän jäsenten sukunimet ja palautuksen aihe. Valitettavasti tästä ohjeesta pidetään kiinni sangen vaihtelevasti, ja usein arviointivaiheessa kuluu turhaan paljon aikaa sen selvittelyyn, että mikä tiedosto kuuluu millekin ryhmälle tai ketä ryhmään kuuluu.

Alla oleva bash-skripti nimeää Moodlesta ladatut tiedostot ryhmätunnuksen ja ryhmän jäsenten sukunimien mukaan. Skriptin raakaversio on tehty Chat GPT:llä, minkä jälkeen se on muokattu toimivaksi käsin.

Ohjelma kopioi ja nimeää vain yhden tiedoston kustakin ryhmäkohtaisesta kansiosta. Jos palautettuja tiedostoja on useampia, ne jäävät tätä yhtä lukuunottamatta kopioimatta ja nimeämättä!

Käyttöohje

  1. Avaa Moodlessa tehtävän palautussivu ja valitse Arviointitoimenpide-kohdassa Lataa kaikki palautukset zip-tiedostona. Lataus alkaa automaattisesti.
  2. Tallenna ladattu zip-tiedosto haluamaasi kansioon
  3. Luo tähän kansioon skriptitiedosto kopioimalla siihen alla oleva koodi. Muista asettaa tiedostolle suoritusoikeudet: chmod +x skriptitiedosto.
  4. Pura zip-tiedosto unzip ladattu_tiedosto.zip, jolloin kullekin opiskelijalle syntyy ryhmätunnuksella ja opiskelijan nimellä nimetty kansio. Kansio sisältää opiskelijan nimeämän palautustiedoston.
  5. Aja skripti: ./skriptitiedosto
  6. Ryhmätunnuksen ja ryhmän sukunimien mukaisesti tiedostot ilmestyvät kansioon. Tiedostoja on yksi kutakin palautuksen tehnyttä ryhmää kohti.
#!/bin/bash

# Create an array to hold the unique group names
declare -A groups

# Iterate over the subdirectories starting with A01
for dir in A01* A02* A03* A04* A05* A06* A07* A08* A09* A10* A11* A12* B01* B02* B03* B04* B05* B06* B07* B08* B09* B10* B11* B12*; do
  # Extract the group name from the subdirectory name
  group=${dir%%-*}

  # Add the group name to the array if it doesn't exist
  if [[ ! ${groups[$group]+_} ]]; then
    groups[$group]=1

    # Collect family names from subdirectory names for the group
    family_names=()
    subdirectories=( "$group"* )  # Get an array of all subdirectories for the group
    for subdir in "${subdirectories[@]}"; do
      name_with_number_text="${subdir#*-}"  # Extract the part after the hyphen
      family_name="${name_with_number_text#* }"  # Extract the family name (after the space)
      family_name="${family_name%%_*}"  # Remove anything after the first underscore

      family_names+=("$family_name")  # Add the family name to the array
    done

    # Rename the file in the group subdirectory using the group designation and family names
    file=$(find "$dir" -type f -printf '%f\n' | head -n 1)
    extension="${file##*.}"
    new_file="${group}-${family_names[*]}.$extension"

    # Remove the subfolder name from the resulting file name
    new_file="${new_file#*-}"
    # Replace spaces with underscores
    new_file="${new_file// /_}"
    # Add group name to the file name
    new_file="${group}_${new_file}"
    # Remove the trailing "/*" from the file path
    file="${file%/*}"
    file="$subdir/$file"
    # Print the command to rename the file
    mv "$file" "$new_file"
  fi
done
Päivitetty 6.6.2023

<<  Edellinen
(3) Automaattinen kielivalinta Moodleen
Sivu 4/4Takaisin ensimmäiseen >>
(1) Työasiaa
© Timo Heikkinen | timo piste heikkinen at oamk piste fi