95 votes

L'ajout d'horodatage pour un nom de fichier avec le mv en BASH

Eh bien, je suis un linux débutant, et je vais avoir un problème avec un simple script bash.

J'ai un programme qui s'ajoute à un fichier journal en cours d'exécution. Au fil du temps que le fichier de journalisation est énorme. J'aimerais créer un script de démarrage qui va renommer et déplacer le fichier journal avant chaque course, ce qui crée des fichiers journaux distincts pour chaque exécution du programme. Voici ce que j'ai obtenu jusqu'à présent:

pastebin

DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program

Lorsque vous exécutez, je vois ceci:

: command not found
program

Quand je cd vers le répertoire de journaux et d'exécuter dir, je vois ceci:

201111211437\r.log\r

Ce qui se passe? Je suis en supposant qu'il certains de la syntaxe question qui me manque, mais je n'arrive pas à le comprendre.


Mise à JOUR: Grâce à shellter de commentaire ci-dessous, j'ai trouvé que le problème soit dû au fait que je suis en train de monter la .sh fichier dans Notepad++ sous windows, puis de les envoyer via ftp sur le serveur, lorsque je lance le fichier via ssh. Après l'exécution de dos2unix sur le fichier, il fonctionne.

Nouvelle question: Comment puis-je enregistrer le fichier correctement en premier lieu, pour éviter d'avoir à effectuer cette correction à chaque fois que je renvoyer le fichier?

104voto

dqw Points 146
mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log

24voto

David W. Points 49436

Les quelques lignes que vous avez posté à partir de votre script regarder bien pour moi. C'est probablement quelque chose d'un peu plus profond.

Vous avez besoin de trouver la ligne qui vous donne cette erreur. Ajouter set -xv vers le haut de votre script. Cela permettra d'imprimer le numéro de la ligne et la commande qui est exécutée à la sortie STDERR. Cela vous aidera à déterminer où dans votre script, vous obtenez cette erreur particulière.

BTW, vous avez un beau spectacle en haut de votre script? Quand je vois quelque chose comme ça, normalement, je doute un problème avec le Shebang. Par exemple, si vous aviez #! /bin/bash sur le dessus, mais votre bash interprète se trouve dans /usr/bin/bash, vous allez voir cette erreur.

MODIFIER

Nouvelle question: Comment puis-je enregistrer le fichier correctement en premier lieu, pour éviter d'avoir à effectuer cette correction à chaque fois que je renvoyer le fichier?

De deux façons:

  1. Sélectionnez le menu Edition->Conversion EOL->Format Unix élément de menu lorsque vous modifiez un fichier. Une fois qu'il a le bon caractère de nouvelle ligne, Notepad++ va les garder.
  2. Assurez-vous que tous les nouveaux fichiers ont le bon caractère de nouvelle ligne, allez dans les Paramètres->Préférences élément de menu, et de tirer vers le haut les Préférences de la boîte de dialogue. Sélectionnez le Nouveau Document/Répertoire par Défaut de l'onglet. En vertu de Nouveau Document et le Format, sélectionnez l' Unix bouton radio. Cliquez sur le Proche bouton.

5voto

Didier Trosset Points 17949

Eh bien, ce n'est pas une réponse directe à votre question, mais il y a un outil dans GNU/Linux, dont le travail consiste à faire pivoter les fichiers journaux sur une base régulière, en gardant les anciens zippée jusqu'à une certaine limite. Il est logrotate

1voto

mkrouse Points 32

Vous pouvez écrire vos scripts dans le bloc-notes, mais assurez-vous de les convertir à l'aide de this -> $ sed-i 's/\r$//' yourscripthere

Je l'utilise tous les ils de temps quand je travaille dans cygwin, et il fonctionne. Espérons que cette aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X