2009-12-15 6 views
1

J'ai un répertoire rempli de fichiers avec des noms aléatoires. Je voudrais pouvoir les renommer 'fichier 1' 'fichier 2' etc. en fonction de l'ordre chronologique, c'est-à-dire la date de création du fichier. Je pourrais écrire un court script Python, mais je n'apprendrais rien. Je me demandais s'il y avait une commande intelligente de 1 ligne qui peut résoudre ceci. Si quelqu'un pouvait me diriger dans la bonne direction.Renommez les fichiers en fonction de la date de création triée?

J'utilise zsh.

Merci!

+3

Sans vouloir être retentissant, je ne crois pas que vous pouvez obtenir la date de création du fichier. ctime est le temps de changement d'inode, qui est différent de ce que vous voulez. Vous pouvez obtenir l'heure de modification, cependant. –

+0

@Brian Agnew: La date de création du fichier est vraiment une caractéristique du système de fichiers (bien que ce soit plutôt rare sur la plupart des systèmes de fichiers unix/linux popuplar). Il est présenté sur la plupart des systèmes basés sur xBSD (y compris Mac OS X) et Windows cependant. – ChristopheD

+0

@ChristopheD - ne savait pas MacOS l'a soutenu. Je crois que ZFS le fait aussi. Mais se manifeste-t-il en tant que ctime? –

Répondre

3

Pour zsh:

saveIFS="$IFS"; IFS=$'\0'; while read -A line; do mv "${line[2]}" "${line[1]%.*}.${line[2]}"; done < <(find -maxdepth 1 -type f -printf "%T+ %f\n"); IFS="$saveIFS" 

Pour Bash (notez les différences dans l'option à read et au lieu d'un à base d'indexation de base zéro):

saveIFS="$IFS"; IFS=$'\0'; while read -a line; do mv "${line[1]}" "${line[0]%.*}.${line[1]}"; done < <(find -maxdepth 1 -type f -printf "%T+\0%f\n"); IFS="$saveIFS" 

Ces renommer des fichiers en ajoutant la date de modification au début du nom de fichier d'origine, qui est conservé pour empêcher les collisions de noms.

Un nom de fichier résultant de cela pourrait ressembler:

2009-12-15+11:08:52.original.txt 

Parce qu'un nul est utilisé comme séparateur de champ interne (IFS), les noms de fichiers avec des espaces doivent être conservés.

Questions connexes