Puis-je répertorier les fichiers classés par date et ajoutés à un dossier à partir d'un outil de ligne de commande tel que ls?

9

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?

Ramiro Araujo
la source
L'afficher ?
Rob
Ligne de commande! J'ai fini par écrire un one-liner qui fait l'affaire. Comme je n'ai pas beaucoup de réputation, je ne peux pas encore répondre à ma propre question, je le ferai plus tard.
Ramiro Araujo
Bienvenue sur le site Ramiro - vous devriez pouvoir répondre à votre propre question à tout moment - mais il y aura une restriction pour vous de "marquer comme acceptée" votre réponse. N'hésitez pas à modifier ma réponse selon vos besoins ou à fournir votre propre réponse si / quand vous le souhaitez.
bmike

Réponses:

5

Solution plus simple (plus rapide):

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Jose Alban
la source
1
oui beaucoup mieux :)
Ramiro Araujo
Quelqu'un pourrait-il préciser ce que chacune de ces lignes fait? De plus, cette solution peut-elle être exécutée dans Terminal sous forme de lignes de commande individuelles (séquentiellement, les unes après les autres) ou uniquement dans un script?
EJ Mak
4

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.

bmike
la source
1
Oui! Je l'ai trouvée plus tard et j'ai fabriqué une belle doublure qui m'a appris beaucoup de choses :) Merci pour l'aide
Ramiro Araujo
2
Collez cette doublure en modifiant ma réponse - partagez vos connaissances!
bmike
2

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:

Ramiro Araujo
la source
oh, j'ai divisé la doublure en plusieurs lignes pour plus de clarté :)
Ramiro Araujo
1
Utilisation ls -A au lieu de -a donc tu n'es pas obligé grep -v pour . et ...
mfilej
0

homme ls

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).
Jason
la source
1
Nope, j'ai besoin de date ajoutée, pas de date créée. Identique au dossier de téléchargement par défaut du dock
Ramiro Araujo
comment la date ajoutée n'est-elle pas la même que la date créée?
Jason
1
Jason - la date de création correspond à la création du fichier. Ainsi, lorsque Safari télécharge un fichier depuis un autre ordinateur, celui-ci a clairement été créé pour ce téléchargement ou aurait pu être créé des mois ou des années avant le téléchargement. Voir ma réponse pour des détails sur l'endroit où ces données sont stockées sur OS X.
bmike