Linux ne doit afficher que la date et la taille du nom de fichier


72

Comment utiliser lslinux pour obtenir une liste des noms de fichiers par date et par taille uniquement. Je n'ai pas besoin de voir les autres informations telles que le propriétaire ou la permission. Est-ce possible?


1
lsest génial parce que le tri par date / heure est très rapide, mais le formatage est difficile à gérer. Je suggère d'utiliser un jeton dans le style --time comme --time-style='+&%Y%m%d+%H%M%S.%N'où le jeton est '&', en utilisant cette référence comme référence, vous pouvez analyser davantage la sortie sedafin que vous puissiez également effectuer un retour en arrière, juste avant la taille du jeton! Si quelqu'un veut poster cela comme réponse complète, n'hésitez pas, je suis trop endormi maintenant :)
Aquarius Power

Réponses:


98

Pourquoi ne pas utiliser statau lieu de ls?

stat -c "%y %s %n" *

1
C'est bien, mais le problème "environnement trop volumineux" / "liste d'arguments trop long" existe potentiellement.
Mat

4
:-) Juste une preuve de concept. Dans la vraie vie [tm] ce sera unfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Pour formater la sortie de stat, vous pouvez ajouter des informations sur la largeur à la chaîne de formatage, comme la fonction C printf, par exemple "%y %8s %n", elle n'est pas documentée, mais semble fonctionner (coreutils 8.17, Fedora 18)
LiuYan

Parce qu'avec lsje peux le sortir avec un caractère séparateur de mille. Comment ça marche avec stat?
Al Bundy

Je ne vois pas comment cela répond à la question?! C'est une belle solution en dehors de la boîte, mais vous perdriez tous les avantages ls. Qu'en est-il des couleurs ??
MS Berends

30

Vous pouvez obtenir beaucoup de contrôle sur la façon dont vous répertoriez les fichiers avec l' findutilitaire. lsne vous laisse pas vraiment spécifier les colonnes que vous voulez.

Par exemple:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

L'argument de l' printfaction est détaillé dans la page de manuel. Vous pouvez choisir différentes informations temporelles, la taille souhaitée (taille du fichier ou des blocs de disque utilisés), etc. Vous pouvez également sécuriser cette option pour les noms de fichiers inhabituels si un traitement supplémentaire est nécessaire.


1
L'entrée ci-dessus à rechercher ('% CY% Cm% Cd.% C ...') est longue. Au moins GNU find a %C+(sortie "2016-08-29 + 10: 57: 56.9201257840") et %Cc(sortie "Mo 29 août 2016 10:57:56 CEST")
guettli

Je souhaite que cela a fonctionné sur les macs.
Jerinaw

charmant, et si vous voulez imprimer uniquement le chemin complet et la taille, cela devrait fonctionner "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Vous pouvez toujours utiliser un autre utilitaire comme awkpour formater la sortie de ls1 :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Oui, en règle générale, vous ne devriez pas analyser la sortie de ls, mais dans ce cas, la question le demande spécifiquement ...


Cela n'imprime cependant pas la taille du fichier. Et il n’imprime que la première partie des noms de fichiers contenant des espaces. Et cela peut échouer si lsest aliasé (par exemple alias ls='ls -i'). Vous devez vraiment faire très attention si vous voulez analyser les résultats de ls.
Mat

J'avais la taille du fichier là-dedans, puis je l'ai édité (moment vague) - je vais le restaurer. Et je suis d’accord sur toutes les mises en garde concernant l’analyse ls, mais c’est ce que le PO voulait ...
jasonwryan

Je ne suis pas d'accord, l'OP veut les noms de fichiers, pas la première partie des noms de fichiers si le nom du fichier a des espaces. (L'utilisation /bin/lséviterait le problème d'alias.)
Mat

Cela est compris implicitement : ce qui est dit explicitement , OP veut une solution avec lslaquelle nous sommes tous les deux d’accord, ne va pas satisfaire aux exigences relatives aux espaces. La /bin/lssuggestion est bonne.
jasonwryan

aimer cette solution; En ce qui concerne les commentaires précédents sur le fait de ne pas imprimer la taille, vous pouvez obtenir la taille avec ls et l'utiliser -hpour la rendre lisible par l'homme. Plus précisément je: ce ls -lah | awk '{print $5,$6,$7,$8}'qui donne: 4.0K Jan 24 18:17. Certes, la solution d'origine ne dit rien sur awk, mais sous Linux, nous devrions supposer que la sortie d'un processus sera toujours l'entrée d'un autre processus, n'est-ce pas? ;)
abgordon

5

Vous pouvez également utiliser la commande 'date'. C'est très facile à utiliser:

date -r [nom du fichier]


Nice, c'était nouveau pour moi. Malheureusement, cela ne fonctionne pas pour plusieurs fichiers via Globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Si vous souhaitez utiliser ls, mais en conservant la taille appropriée, vous pouvez utiliser:

ls -Ss1pq --block-size=1

1

où l'espace est défini comme le séparateur et f6 le champ 6

ls -lt | cut -d" " -f6-

2
il a échoué parce que ls utilise des espaces pour l'indentation et qu'il est parfois -f6- d'autres fois où il est -f5-
Aquarius Power

1

Vous pouvez pipeline deux commandes

ls -l|cut -d" " -f5

1
il a échoué parce que ls utilise des espaces pour l'indentation et qu'il est parfois -f6- d'autres fois où il est -f5-
Aquarius Power

-1

ls -s1 renvoie la taille et le nom du fichier uniquement sous AIX, mais vous n'êtes pas sûr de Linux


2
Pouvez-vous expliquer comment / pourquoi vous croyez que cela répond à la question?
Scott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.