lunedì 21 gennaio 2019

Trovare i file in tutte le sottocartelle con il comando DIR (e filtrarli, se necessario) - episodio 1

Buongiorno e benvenuti ad un altro episodio del mio blog, nel quale cerco di riportare in auge la potenza degli script e della command line per l’amministrazione e la gestione dei sistemi.

Oggi parliamo del comando DIR e delle sue potenzialità inespresse.

Può capitare infatti che ci venga richiesto di elencare solo determinati tipi di files in TUTTE LE SOTTODIRECTORY di un albero di cartelle.

Che fare dunque? Andare ad aprirle tutte a mano? Ma certo che NO!

Premessa

Per seguire questo articolo è necessaria una minima conoscenza del comando DIR. Minima minima…
… almeno averlo usato una volta nella vita…

Tutta la potenza di DIR

Vediamo insieme l’help di DIR, così da capire quali sono le moltissime potenzialità, spesso sconosciute, di questo comando di sistema, tra i più vecchi ed affidabili della storia dell’informatica.

C:\Users\DiegoC>dir /?
Mostra l'elenco dei file e delle sottodirectory in una directory.

DIR [unità:][percorso][nomefile] [/A[[:]attributi]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]ordinamento]] [/P] [/Q] [/R] [/S] [/T[[:]campo data]] [/W] [/X] [/4]

  [unità:][percorso][nomefile]
              Specifica unità, directory e/o file da elencare.

  /A          Visualizza i file con gli attributi specificati.
  attributi    D  Directory                  R  File sola lettura
               H  File nascosti              A  File archivio
               S  File di sistema            I  File non indicizzati
               L  Reparse point             - Prefisso per negare l'attributo
  /B          Utilizza lista file senza intestazione o informazioni di
              riepilogo.
  /C          Visualizza il separatore delle migliaia nelle dimensioni dei
              file. Impostazione predefinita. Utilizzare /-C per disabilitarla.
  /D          Come /W ma con i file ordinati per colonna.
  /L          Utilizza caratteri minuscoli.
  /N          Nuovo formato lungo, con nomi file a destra.
  /O          Elenca file ordinandoli.
  ordinamento  N  Per nome, alfabetico       S  Per dimensione, dal minore
               E  Per estensione, alfabetico D  Per data e ora dal più vecchio
               G  Mostra prima directory     - Prefisso per invertire l'ordine
  /P          Mostra elenco una schermata per volta.
  /Q          Mostra il proprietario del file.
  /R          Visualizza flussi di dati alternativi del file.
  /S          Mostra file della directory e delle relative sottodirectory.
  /T          Controlla campo data visualizzato o utilizzato per ordinare.
  campo data  C  Creazione
              A  Ultimo accesso
              W  Ultima scrittura
  /W          Visualizza in formato ampio.
  /X          Mostra i nomi brevi generati per i nomi con formato lungo.
              Il formato è come quello di /N con nomi
              abrevi prima del nome esteso. Se non ci sono nomi brevi
              vengono visualizzati spazi bianchi.
  /4          Mostra l'anno in formato 4 cifre

Le opzioni possono essere preimpostate nella variabile d'ambiente DIRCMD.
Le opzioni preimpostate vengono annullate con un trattino, es./-W.



Non mi soffermerò qui sui comandi più banali di DIR, perché, come detto, mi aspetto che almeno il minimo lo abbiate già fatto (dir *.*, dir c:\test\, dir /W, …) ma andrò direttamente al “succo” dei comandi + interessanti.



/S e /B combinati: preparare l’output perché venga usato come input da un altro comando.

Come avete potuto apprezzare nell’help, il /S prevede che la ricerca non si fermi alla prima cartella / directory dell’albero, mentre il /B prevede che l’output sia un semplice elenco di file e cartelle, senza informazioni di intestazione etc… vediamo due esempi:

dir /S 




dir /B 



Ma che succede se combiniamo queste due opzioni?

La cosa mitica è che vedremo un elenco di files e cartelle, senza intestazioni o informazioni, con TUTTO IL LORO PERCORSO ASSOLUTO.
Questo è fantastico se dobbiamo, ad esempio, eseguire un comando su ogni file di un certo tipo in tutte le sottocartelle (come vedremo + avanti nell’articolo)

Dir /S /B




Come elencare solo le directory in tutte le sottocartelle

Come abbiamo visto nell’help, l’opzione del comando che filtra per determinati attributi è /A, combinata con una lettera che indica l’attributo, appunto, da cercare.
Possiamo, ad esempio, cercare solo le CARTELLE:

dir /AD /S



… e se le vogliamo vedere tutte una dietro l’altra (come detto nel paragrafo precedente):

dir /AD /S /B


Come trovare tutti i files nascosti 

Ecco come, con il parametro del comando /A è possibile filtrare per altri attributi.
Ho infatti assegnato al file C:\interventi\test\10000\10001\testTxtfile.txt gli attributi di NASCOSTO e SOLA LETTURA.

E' possibile inoltre filtrare in modo NEGATIVO, escludendo i files e le cartelle con un determinato attributo, con la NEGAZIONE per mezzo del meno. Avremo che:

dir /A-DH /S /B 



significa: trova tutti i files che NON sono cartelle E che HANNO l'attributo nascosto (hidden - file nascosti)

Come elencare / listare solo i files di tipo … escludendo le cartelle

… xml, pdf, word, docx, excel, xlsx, … insomma: ci potete mettere quello che volete, alla fine dei 3 puntini…
Di fatto vi basta aggiungere un *. nell’opzione [nomefile] del comando, per filtrare / selezionare SOLO i file con una certa estensione in TUUUTTO l’albero delle cartelle.

Ed ecco qui un paio di esempi:

dir /A-D /S /B C:\interventi\test\*.xlsx
dir /A-D /S /B C:\interventi\test\*.pup
dir /A-D /S /B C:\interventi\test\*.txt



Come avete visto, utilizzo il /A-D per escludere volontariamente le cartelle, perché le cartelle POSSONO contenere il punto nel nome… quindi ci possono essere dei falsi positivi e poi, hey: l’ho detto che parlavo solo dei comandi “avanzati”, giusto? 😊



… per oggi abbiamo finito …

Presto invierò il secondo articolo di questa mini-serie sul poderoso comando DIR. Nel frattempo:
HAPPY SCRIPTING!


Nessun commento:

Posta un commento

I commenti sono soggetti a moderazione, prima di essere pubblicati.

Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.