Shell script: Obtenir le nom du dernier fichier dans un dossier par ordre alphabétique
J'ai un dossier avec des sauvegardes à partir d'une base de données MySQL qui sont créés automatiquement. Leur nom est composé de la date à laquelle la sauvegarde a été faite, comme suit:
2010-06-12_19-45-05.mysql.gz
2010-06-14_19-45-05.mysql.gz
2010-06-18_19-45-05.mysql.gz
2010-07-01_19-45-05.mysql.gz
Ce qui est un moyen de récupérer le nom du dernier fichier dans la liste, c'est à dire de celui qui, selon l'ordre alphabétique est le dernier?
Dans un script shell, je voudrais faire quelque chose comme
LAST_BACKUP_FILE= ???
gunzip $LAST_BACKUP_FILE;
source d'informationauteur yan
Vous devez vous connecter pour publier un commentaire.
Si vous voulez assigner à une variable, utilisez
$(...)
ou backticks.@Sjoerd réponse est bonne, je vais juste prendre un peu lentes:
vous n'avez pas besoin de la
-1
option pour appliquer un chemin d'accès par ligne, si vous redirigez la sortie de quelque part:vous pouvez utiliser
-r
pour obtenir la liste dans l'ordre inverse, et de prendre le premier:gunzip some.log.gz
va écrire les données non compressées danssome.log
et supprimersome.log.gz
qui peut ou peut ne pas être ce que vous voulez (n'est probablement pas). si vous voulez garder la source compressée, pipe engunzip
:vous pouvez protéger le script par rapport à la situation lors de la dir contient pas de fichiers, depuis
étend à juste
et cette invocation d'attendre pour les données sur l'entrée standard:
ls
peut produire des résultats inattendus lorsque analysée par d'autres commandes si les fichiers ont des caractères inhabituels. Le suivant fonctionne toujours:for LAST_BACKUP_FILE in *
parcourt chaque nom de fichier dans l'ordre dans le répertoire courant, le stockage de chaque dans$LAST_BACKUP_FILE
do :
ne fait riendone
se termine après le dernier fichierMaintenant, le dernier fichier est stocké dans
$LAST_BACKUP_FILE
.Si vous souhaitez que le premier fichier, utilisez ceci:
La
break
instruction permet de sortir de la boucle après le premier fichier est stocké dans$FIRST_BACKUPT_FILE
.La coquille est plus puissant que beaucoup ne le pensent. Juste laissez-le travailler pour vous. En supposant que les noms de fichiers sans espaces,
fait le truc avec une simple fourchette, pas de tuyaux, et vous pouvez même éviter la fourchette si votre shell prend en charge l'expansion arithmétique comme dans