Publié le :

Trouver des fichiers volumineux et exporter la liste

En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script utilise une commande système 'X' pour exécuter une commande 'find' sous UNIX. Cette commande recherche tous les fichiers (-type f) de plus de 1 Gigaoctet (-size +1G) dans le répertoire '/n04/data/aco' et écrit les détails au format 'long listing' (-fls) dans un fichier texte. Ensuite, un DATA STEP lit ce fichier texte, parse chaque ligne pour extraire des informations détaillées comme les permissions, le propriétaire, la taille, la date et le chemin du fichier. Enfin, la procédure PROC EXPORT est utilisée pour convertir la table SAS© résultante en un fichier Excel.
Analyse des données

Type : EXTERNE


La source de données est un fichier texte généré dynamiquement par une commande système UNIX 'find'. Le script lit ensuite ce fichier pour créer une table SAS. Il ne dépend pas de tables SAS préexistantes ou de la librairie SASHELP.

1 Bloc de code
X COMMAND
Explication :
Ce bloc exécute une commande système (via 'X') pour trouver les fichiers de plus de 1 Go dans le répertoire '/n04/data/aco'. Les résultats sont écrits dans un fichier texte. Un fileref 'in1' est ensuite assigné à ce fichier pour une lecture ultérieure.
Copié !
1%let outfile=aco_over_1_gig;
2 
3x "cd /n04/data/aco; find . -type f -size +1G -fls /n04/data/p4vrept/&outfile..txt";
4 
5filename in1 "/n04/data/p4vrept/&outfile..txt";
6RUN;
2 Bloc de code
DATA STEP Data
Explication :
Cette étape DATA lit le fichier texte ligne par ligne via le fileref 'in1'. Chaque ligne est lue dans la variable 'alldata', puis parsée en utilisant les fonctions SUBSTR et INDEX pour extraire les différents champs (permissions, propriétaire, groupe, taille, date, chemin du fichier) basés sur la position des espaces. Une nouvelle table SAS nommée 'acoin' est créée avec ces données structurées.
Copié !
1DATA acoin;
2 INFILE in1 truncover;
3 INPUT alldata $254.;
4 
5 LENGTH lid group filesize path_filename permissions date field1-field11 alldata2-alldata9 $254.;
6 field1 = substr(alldata,1,index(alldata,' '));
7 alldata2 = trim(left(substr(alldata,index(alldata,' '))));
8 field2 = substr(alldata2,1,index(alldata2,' '));
9 alldata3 = trim(left(substr(alldata2,index(alldata2,' '))));
10 permissions = substr(alldata3,1,index(alldata3,' '));
11 alldata4 = trim(left(substr(alldata3,index(alldata3,' '))));
12 field4 = substr(alldata4,1,index(alldata4,' '));
13 alldata5 = trim(left(substr(alldata4,index(alldata4,' '))));
14 lid = substr(alldata5,1,index(alldata5,' '));
15 alldata6 = trim(left(substr(alldata5,index(alldata5,' '))));
16 group = substr(alldata6,1,index(alldata6,' '));
17 alldata7 = trim(left(substr(alldata6,index(alldata6,' '))));
18 filesize = substr(alldata7,1,index(alldata7,' '));
19 alldata8 = trim(left(substr(alldata7,index(alldata7,' '))));
20 field8 = substr(alldata8,1,index(alldata8,' '));
21 alldata9 = trim(left(substr(alldata8,index(alldata8,' '))));
22 field9 = substr(alldata9,1,index(alldata9,' '));
23 alldata10 = trim(left(substr(alldata9,index(alldata9,' '))));
24 field10 = substr(alldata10,1,index(alldata10,' '));
25 IF field10 not in('2010','2011','2012','2013','2014','2015','2016','2017','2018') THEN
26 field10 = '2019';
27 date = trim(left(field8))||'-'||trim(left(field9))||'-'||trim(left(field10));
28 path_filename = substr(alldata10,index(alldata10,' '));
29RUN;
3 Bloc de code
PROC EXPORT
Explication :
Cette procédure exporte le contenu de la table SAS 'acoin' vers un fichier Microsoft Excel (.xlsx). Le fichier existant est remplacé s'il existe déjà grâce à l'option 'replace'.
Copié !
1PROC EXPORT DATA=acoin
2file="/n04/data/p4vrept/&&outfile..xlsx"
3dbms=xlsx replace;
4sheet="Sheet1";
5RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« L'instruction X nécessite que l'option système XCMD soit activée sur le serveur. Dans les environnements hautement sécurisés, cette option est souvent désactivée. Si tel est votre cas, vous devrez vous tourner vers le moteur de fonction PIPE (via FILENAME PIPE), qui permet de lire le flux de sortie de la commande directement dans SAS sans passer par un fichier texte intermédiaire. »