append un horodatage à un nom de fichier dans un script unix

J’ai un tas de fichiers générés par le système hérité et le besoin est de renommer les fichiers en description longue (ce que les utilisateurs professionnels peuvent comprendre).

Exemple de nom de fichier: bususrapp.O16200.L1686.1201201304590298

RptList: bususrapp Billing file for app user

Lorsque le système génère un fichier de fichier ‘bususrapp’, celui-ci sera traduit en ‘Fichier de facturation pour l’utilisateur de l’application’ et le résultat final doit correspondre à « Fichier de facturation pour l’application user.1201201304590298.txt ».

 for i in `ls * `; do j=`grep $i /tmp/Rptlist | awk '{print $2 $3 $4 $5} ;'` mv $i $j; done 

Le dernier qualificatif dans le fichier exemple est mon horodatage. Je dois couper / copier et append le nouveau nom de fichier de description longue. ” Fichier de facturation pour l’application user.1201201304590298.txt

Veuillez suggérer comment réaliser cela.

Je crois que ce qui suit fera ce que vous voulez.

 for file in *; do # Drop everything up to the last . stamp=${fname##*.}; # Drop everything after the first period. name=${fname%%.*} # Find the matching line in RptList. line=$(grep "$name" RptList) # Drop the first (space separated) field. line=${line#* } outfile="$line.$stamp.txt" mv $file $outfile; done 

Donnez votre fichier d’entrée, cet awk fera votre nom de fichier de sortie désiré:

 echo "bususrapp.O16200.L1686.1201201304590298 RptList: bususrapp Billing file for app user" | awk -F"[.]| RptList| bususrapp " '{print $NF"." $4 ".txt"}' Billing file for app user.1201201304590298.txt 

Utilisez FS pour faire tout le travail difficile, puis imprimez les champs les champs dans l’ordre spécifié.


Voici une réponse plus complète:

 # use find instead of ls, pointing to files only find /tmp/Rptlist -name "bususrapp*" -type f -print | awk -F/ ' { # rebuild the path which was split up by FS for(i=1;i 

Juste un style différent. La réponse de @EtanReisner est plus propre. Comme je ne script pas en bash, c'est ce que j'aurais essayé.