2010-11-17 7 views
0

J'essaye d'écrire un script bash qui prend un fichier en $ 1, puis le copie et ajoute l'année, le mois et la date à la fin du fichier. Ainsi, par exemple, si j'avais un fichier foo.txt, il deviendrait foo.txt.2010.11.16. Je ne suis pas vraiment sûr à 100% comment faire cela, des suggestions?script bash pour la suspension des dates sur les fichiers

+0

« sur la fin de le fichier "- Apparemment, vous voulez dire à la fin du fichier * nom *. –

Répondre

1

Vous pouvez le faire en utilisant $(date ...) pour obtenir la date actuelle dans une variable d'environnement. Le script suivant vous permet de transmettre un nombre quelconque de noms de fichiers et il tentera de les copier tous dans des fichiers similaires avec la date ajoutée.

Il obtient la date une fois dans le cas où vous essayez de l'exécuter vers minuit et que vous voulez que tous obtiennent la même date même si vous passez au jour suivant pendant le processus.

#!/usr/bin/bash 

if [[ $# -lt 1 ]] ; then 
    echo 'Usage: datecp <filename> ...' 
    exit 1 
fi 

dt=$(date +%Y.%m.%d) 
while [[ $# -ne 0 ]] ; do 
    if [[ ! -f "$1" ]] ; then 
     echo 'Warning:' $1 'is not a regular file, not copied' 
    else 
     newf="$1.$dt" 
     cp "$1" "$newf" 
     echo "$1" '-->' "$newf" 
    fi 

    shift 
done 

La sortie pour le dernier est le long des lignes de:

pax> datecp 
Usage: datecp <filename> ... 

pax> datecp xyz 
xyz --> xyz.2010.11.17 

pax> datecp xyz abc 
xyz --> xyz.2010.11.17 
abc --> abc.2010.11.17 

pax> ./qq.sh xyz qwert abc 
xyz --> xyz.2010.11.17 
Warning: qwert is not a regular file, not copied 
abc --> abc.2010.11.17 
3

Version simple:

#!/bin/bash 
cp "$1" "$1".`date +%Y.%m.%d` 

Version Fancier:

#!/bin/bash 
# 
# date_tag_files file1 [file2 file3 ...] 
# 
for f in $* 
do 
    cp "$f" "$f".`date +%Y.%m.%d` 
done 
+0

merci beaucoup. – brian

Questions connexes