Unix Shell script archive le fichier du mois précédent

J’ai des fichiers qui ont le format suivant dans le répertoire:

SLS20160112.001 (20160112 stands for YYYYMMDD) 

Je souhaite archiver tous les fichiers du mois précédent, par exemple:

SLS20160201.001

SLS20150201.001

SLS20160107.001

SLS20160130.001

Pour les fichiers ci-dessus répertoriés, je vais archiver SLS20160107.001 et SLS20160130.001 car à partir du nom de fichier estampillé Janvier.

Pour le SLS20160201.001, il rest toujours comme je veux seulement archiver le fichier du mois précédent. Je ne peux extraire que la date du nom de fichier, pas la date ou l’adate.

Ma logique actuelle consiste à parcourir tous les fichiers, puis à récupérer les fichiers du mois précédent, puis à définir le nom du fichier et à le sortinger. Mais je ne sais pas comment faire cette partie.

 for file in SLS*; do f="${file%.*}" GET PREVIOUS MONTH FILES AND THEN ECHO done | tar cvzf SlSBackup_.TAR.GZ -T- 

Il semble que vous vouliez résoudre le problème en utilisant un script shell. Je fais beaucoup de travail sur Mac donc j’utilise csh / tcsh (shell par défaut pour OSX) et ma réponse sera dans le script csh / tcsh. Vous pouvez soit le traduire en bash (votre shell), soit créer un nouveau shell en tapant simplement $ tcsh .

Vous pouvez écrire un petit script shell qui peut filtrer la liste de fichiers pour le mois souhaité.

 #!/bin/csh -f set mon_wanted = '01' foreach file (`ls -1 SLS*.*`) set mon = `echo $file | awk '{print substr($0, 8, 2)}'` if ($mon != $mon_wanted) continue echo -n $file ' ' end 

Disons que le nom de fichier est foo.csh. Rendez-le exécutable par

 $ chmod 755 foo.csh 

Alors,

 $ tar cvzf `foo.csh` > out.tar.gz