Mastodon

In Tcl ci sono due comandi per ottenere le informazioni sul file system:

  • glob
  • file

Questi comandi mettono a disposizione diverse opzioni (sottocomandi) utili per esaminare e manipolare sia i files che le directories (cartelle).

I sottocomandi sono generalmente indipendenti dal sistema operativo in uso, ma ve ne sono anche alcuni specializzati per differenti sistemi operativi.

Comando glob

Il comando glob restituisce i nomi dei files e delle subdirectories di una specifica directory.

# esempio
puts "Working directory:\n  [pwd]\n"
set fileList [lsort [glob *.tcl]]
puts "List of tcl files:"
foreach f $fileList {
	puts "  $f"
}
---
Working directory:
  /home/luca/coding/test

List of tcl files:
  000_helloworld.tcl
  001_glob.tcl
  002_file.tcl

Comando file

Il comando file mette a disposizione diversi sottocomandi che possiamo suddividere in tre differenti aree di funzionalità.

Sottocomandi per manipolare i nomi

    dirname myPath | restituisce lo stesso percorso myPath senza però l'ultimo elemento
  extension myFile | restituisce l'estensione del file myFile
join myPath myFile | unisce i due argomenti
 nativename myFile | restituisce il nome del file coerente al sistema operativo in uso
   rootname myFile | restituisce il nome del file senza estensione
      split myPath | restituisce una lista con i nomi delle cartelle che compongono myPath
   tail myPathFile | restituisce il nome del file senza il suo percorso
# esempio
set     myPath "/dir1/dir2/dir3"
set     myFile "test.tcl"
set myPathFile "$myPath/$myFile"

puts "   dirname: [file dirname $myPath]"
puts " extension: [file extension $myFile]"
puts "      join: [file join $myPath $myFile]"
puts "nativename: [file nativename $myFile]"
puts "  rootname: [file rootname $myFile]"
puts "     split: [file split $myPath]"
puts "      tail: [file tail $myPathFile]"
---
   dirname: /dir1/dir2
 extension: .tcl
      join: /dir1/dir2/dir3/test.tcl
nativename: test.tcl
  rootname: test
     split: / dir1 dir2 dir3
      tail: test.tcl

Sottocomandi per ricavare informazioni specifiche

      atime myFile | restituisce il tempo dell'ultimo accesso al file
 executable myFile | restituisce 1 se l'argomento è un file eseguibile
     exists myFile | restituisce 1 se l'argomento è un file esistente, altrimenti 0
isdirectory myPath | restituisce 1 se l'argomento è una cartella, altrimenti 0
     isfile myFile | restituisce 1 se l'argomento è un file, altrimenti 0
       size myFile | restituisce le dimensioni del file in bytes
       type my**** | restituisce l'indicazione "file" o "directory"
   writable myFile | restituisce 1 se il file è scrivibile, altrimenti 0
# esempio
set myPath [pwd]
set myFile "002_file_b.tcl"

puts "      atime: [file atime $myFile]"
puts " executable: [file executable $myFile]"
puts "     exists: [file exists $myFile]"
puts "isdirectory: [file isdirectory $myFile]"
puts "isdirectory: [file isdirectory $myPath]"
puts "     isfile: [file isfile $myFile]"
puts "     isfile: [file isfile $myPath]"
puts "       size: [file size $myFile]"
puts "       type: [file type $myFile]"
puts "       type: [file type $myPath]"
puts "   writable: [file writable $myFile]"
---
      atime: 1786696895
 executable: 0
     exists: 1
isdirectory: 0
isdirectory: 1
     isfile: 1
     isfile: 0
       size: 517
       type: file
       type: directory
   writable: 1

Sottocomandi per creare, cancellare e rinominare

  copy ?-force? my**** myTarget | copia il file o la directory
         delete ?-force? my**** | cancella il file o la directory
                   mkdir myPath | crea una nuova directory
rename ?-force? my**** myTarget | rinomina o muove il file o la directory

Nel prossimo articolo affronteremo un argomento molto interessante: come avviare altri programmi da Tcl.