R per l’amministrazione di sistema – rinomina di file in massa

L’amministrazione di un sistema Windows può rivelarsi un problema piuttosto complicato.
Gli strumenti da riga di comando forniti dal sistema di Microsoft sono molto potenti ma spesso richiedono uno sforzo notevole per ottenere esattamente ciò che si vuole. Alcune operazioni di routine, sia per amministratori, sia per utenti comuni, possono richiedere una lunga serie di passaggi.
È il caso di quando dobbiamo rinominare grandi quantità di file tutte in una volta, magari senza avere un pattern preciso per la rinomina. Questo problema, indicato in genere come bulk / batch renaming, si risolve facilmente usando R, sfruttando in particolare le potenzialità delle funzioni file.—

Le funzioni file.—

La funzione fa parte del gruppo files, incluso nelle librerie di base di R. La documentazione del gruppo (?files) recita:

Queste funzioni forniscono un’interfaccia di basso livello al file-system del computer

Quella enunciata è proprio una delle caratteristiche che garantiscono l’efficacia di uno strumento di amministrazione di sistema.
Nella documentazione si specifica che queste funzioni accettano i nomi dei file come stringhe. Si può dare in pasto al comando sia un file singolo, sia un vettore contenente numerosi file. Entrambe queste caratteristiche hanno la loro utilità: poter ricevere l’informazione relativa a un singolo file permette una semplice esecuzione del comando in situazioni isolate. La possibilità di ricevere un vettore facilita l’interazione con comandi che generano liste, ad esempio dir().

file.rename()

È il principale comando che andremo a utilizzare. Prende in input due elementi: from e to, rispettivamente il vecchio e il nuovo nome del file che vogliamo rinominare. Come suggerito dalla documentazione, possiamo utilizzare sia singoli file, sia vettori di files. Il problema del bulk renaming, in R, si riduce quindi alla costruzione degli elementi “nomi vecchi”, “nomi nuovi”.

Esempio: Semplice rinomina file in massa

Supponiamo di voler aggiungere il prefisso “old_” al nome di tutti i file presenti in una directory.
Questa operazione si effettua con un solo comando, simile al seguente:

file.rename(dir(),paste("old_",dir(),sep=""))
  • Abbiamo sfruttato il fatto che la funzione dir() restituisca una lista di stringhe, e che, come suggeriva la documentazione di file.—, questo elemento possa essere passato come input;
  • Abbiamo effettuato una semplice concatenazione di stringhe usando la funzione paste();

La versatilità del comando dir() permette di effettuare operazioni anche molto complicate utilizzando variazioni della stessa unica riga illustrata in precedenza:

file.rename(dir(“*.txt”),paste("old_txt_",dir(“*.txt”),sep=""))
file.rename(dir(“*.mp3”),paste("old_songs_",dir(“*.mp3”),sep=""))

per poter rinominare, ad esempio, solo i file con una certa estensione.

In questo post abbiamo riflettuto su un problema pratico come rinominare una grande quantità di file in un sistema Windows.
Questo problema fa parte in realtà di una questione più complessa, che riguarda la difficoltà di amministrare in maniera efficace un sistema che non offre strumenti da riga di comando utilizzabili in maniera semplice.
Abbiamo illustrato le potenzialità delle funzioni files e abbiamo risolto il problema pratico utilizzando una sola riga di codice.

Nel prossimo post di questa serie approfondiremo altre potenzialità legate alla rinomina di massa dei file tramite R. Illustreremo un esempio più complicato e faremo vedere come molti concetti utilizzati nello scripting BASH per l’amministrazione dei sistemi UNIX esistano anche nelle funzioni del linguaggio R, che è invece multipiattaforma.

 

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...