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?

Auriculaire
la source
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" *
f4m8
la source
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.

Tapis
la source
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 ...

jasonwryan
la source
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]

Ankit Khare
la source
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
Profond
la source
1

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

ls -lt | cut -d" " -f6-
zzapper
la source
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
Deepak
la source
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

cacflyer
la source
2
Pouvez-vous expliquer comment / pourquoi vous croyez que cela répond à la question?
Scott