2016-10-07 3 views
1

Tout d'abord, le serveur exécute Solaris. Le contexte de ma question est Informatica PowerCenter.Solaris: Regex comment sélectionner des fichiers avec un certain nom de fichier

J'ai besoin de répertorier les fichiers situés dans le répertoire Boîte de réception. Fondamentalement, le résultat devrait être une liste de fichiers par type de fichier. Les différents types de fichiers sont distingués par le nom du fichier. Je ne veux pas mettre à jour le script chaque fois qu'un nouveau type de fichier commence à exister donc je pensais à un script shell paramétrés avec le regex, le répertoire de boîte de réception et la liste des fichiers

Un exemple:

/Inbox/ABC.DEFGHI.PAC.AE.1236547.49566 
/Inbox/ABC.DEFGHI.PAC.AE.9876543.21036 
/Inbox/DEF.JKLMNO.PAC.AI.1236547.49566 

... doit entraîner 2 fichiers de la liste contenant le chemin et le nom du fichier des fichiers répertoriés:

/Inbox/PAC.AE.FILELIST 
-->/Inbox/ABC.DEFGHI.PAC.AE.1236547.49566 
-->/Inbox/ABC.DEFGHI.PAC.AE.9876543.21036 
/Inbox/PAC.AI.FILELIST 
-->/Inbox/DEF.JKLMNO.PAC.AI.1236547.49566 

Répondre

0

en supposant que tous les fichiers d'entrée suivent la convention que vous indiquez (lors du partage sur des points, le 3ème et 4ème colonne déterminer le type), ce script pourrait faire l'affaire:

#! /usr/bin/env bash 

# First parameter or current directory 
INPUTDIR=${1:-.} 
# Second parameter (or first input directory if not given) 
OUTPUTDIR=${2:-$INPUTDIR} 
# Filter out directories 
INPUTFILES=$(ls -p $INPUTDIR | grep -v "/") 

echo "Input: $INPUTDIR, output: $OUTPUTDIR" 

for FILE in $INPUTFILES; do 
    FILETYPE=$(echo $FILE | cut -d. -f3,4) 
    COLLECTION_FILENAME="$OUTPUTDIR/${FILETYPE:-UNKNOWN}.FILELIST" 
    echo "$FILE" >> $COLLECTION_FILENAME 
done 

Utilisation:

./script.sh Inbox Inbox/collections 

lirons tous les fichiers (pas les répertoires) de la boîte de réception, et écrire les fichiers de collecte à la boîte de réception/collections. Les noms de fichiers à l'intérieur des collections doivent être triés par ordre alphabétique.