Je dois créer un script qui affiche les fichiers dans le même ordre que le dossier Téléchargements par défaut du dock, classés par Date ajoutée, le plus récent en premier. Je n'arrive pas à trouver l'option dans ls
.
Une autre façon de le faire?
Je dois créer un script qui affiche les fichiers dans le même ordre que le dossier Téléchargements par défaut du dock, classés par Date ajoutée, le plus récent en premier. Je n'arrive pas à trouver l'option dans ls
.
Une autre façon de le faire?
Réponses:
Solution plus simple (plus rapide):
mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
La date ajoutée est stockée en tant qu'élément de métadonnées kMDItemDateAdded
et le mdls
La commande exposera les données de chaque fichier passé en argument.
Ainsi, pour vider la date ajoutée pour tous les fichiers dans Téléchargements dans n'importe quel ordre * étendu par votre shell, vous pouvez:
mdls -name kMDItemDateAdded ~ / Téléchargements / *
Vous aurez besoin de bidouiller une combinaison de find et sed / awk / perl / peu importe pour assembler un remplacement pour ls
mais peut-être que mdfind peut être appelé par votre script plutôt que de devoir réinventer ls
et analyser cette sortie.
Comme d'habitude, après avoir écrit la question, je commence à chercher le contenu des métadonnées dans les fichiers et je finis par écrire ceci:
ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r
Fondamentalement, il: 1. lister tous les fichiers 2. filtre. et .. 3. obtient le nom et la date ajoutés, une ligne après l'autre 4. fusionne toutes les deux lignes en une ligne 5. extrait la date, l'heure et le nom 6. le trie à l'envers (puisque datetime est upfront, il trie par datetime)
J'espère que ça aide quelqu'un d'autre! :)
@bmike en fait, le site m'a imposé une restriction pour répondre à ma propre question seulement 8 heures après avoir posté ma question, en raison de mon manque de réputation:
ls -A
au lieu de -a
donc tu n'es pas obligé grep -v
pour .
et ..
.
homme ls
-U Use time of file creation, instead of last modification for sorting (-t) or long output (-l).