2011-10-30 11 views
2

J'ai besoin de script pour copier sur une base de cron une liste de fichiers. Les fichiers sélectionnés sur le modèle name/datetime et le nom de la destination du fichier doivent être ajoutés à des données telles que ddmmyyy. Ce n'est pas un problème de copier des fichiers ou un répertoire, mais un problème pour changer le nom de chaque fichier en fonction de ses données. Peut exister une solution open source? Merci.Linux bash script pour copier des fichiers

Répondre

4

Vous n'avez pas fourni suffisamment d'informations pour que je puisse vous donner un vrai code de travail; mais vous pouvez faire quelque chose comme ceci:

file=dated_log.log 
ddmmyyyy=$(read -r < "$file" ; echo "${REPLY:1:8}") 
cp "$file" "$file.$ddmmyyyy" 

ci-dessus copiera dated_log.log-data_log.log.30102011, en supposant que la première ligne de dated_log.log commence par 30102011.

Le Bash Reference Manual devrait vous aider à faire les réglages ci-dessus pour convenir à vos besoins.

+0

Au lieu de 'ddmmyyyy = $ (lire -r <" $ file "; echo" $ {REPLY: 1: 8} ")' vous pourriez 'lire -r -n 8 ddmmyyyy <" $ file "'. –

+0

@gniourf_gniourf: Oui, bon point. Mais je pense que ma réponse est meilleure, car je doute que le format de fichier de l'OP * réellement * commence par les huit bons caractères, et je pense que le code que j'ai posté est susceptible d'être plus facilement modifié le PO a besoin. (Supposons que l'OP ait réellement besoin des caractères 30 à 37. Comment ajuster 'read -r -n 8 ddmmyyy' pour les récupérer?) – ruakh

+1

pour les caractères 30 à 37:' read -r -n 37 ddmmyyyy <"$ file" ; ddmmyyyy = $ {ddmmyyyy: 30} 'fera l'affaire. Ou même directement: 'read -r ddmmyyyy <" $ file "; ddmmyyyy = $ {ddmmyyyy: 30: 8} '. Ou 'read -r ddmmyyyy; printf -v ddmmyyyy "% .8s" "$ {ddmmyyyy: 30}" 'ou ... le but est juste d'éviter un sous-shell (je trouve personnellement' $ (... echo) 'de style plutôt mauvais.':) '. –

Questions connexes