Linux powinien wyświetlać tylko datę i rozmiar nazwy pliku


71

Jak mogę użyć lsw systemie Linux, aby uzyskać listę nazw plików tylko datę i rozmiar. Nie muszę widzieć innych informacji, takich jak właściciel lub pozwolenie. czy to możliwe?


1
lsjest świetny, ponieważ ma bardzo szybkie sortowanie według daty i godziny, ale trudno jest sformatować. Sugeruję użycie tokena w stylu --time, tak jak --time-style='+&%Y%m%d+%H%M%S.%N'tam, gdzie token to „&”, używając tego jako odniesienia, możesz dalej analizować dane wyjściowe, seddzięki czemu możesz również cofnąć się, tak jak zanim token ma rozmiar! Jeśli ktoś chce napisać to jako kompletną odpowiedź, nie krępuj się, w tej chwili za bardzo śpię :)
Aquarius Power

Odpowiedzi:


98

Dlaczego nie użyć statzamiast ls?

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

1
Jest to miłe, ale potencjalnie może mieć problem z „zbyt dużą ilością argumentów / zbyt długiej listy argumentów”.
Mat

4
:-) Tylko dowód koncepcji. W prawdziwym życiu [tm] będzie tofind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Aby sformatować dane wyjściowe stat, możesz dodać informacje o szerokości do ciągu formatu, np. Funkcję C printf, np. "%y %8s %n"Nie jest to udokumentowane, ale wydaje się działać (coreutils 8.17, Fedora 18)
LiuYan 研 研

Ponieważ lsmogę go wyprowadzić za pomocą separatora tysięcy znaków. Jak to działa stat?
Al Bundy,

Nie rozumiem, jak to odpowiada na pytanie ?! To fajne rozwiązanie poza pudełkiem, ale straciłbyś wszystkie korzyści ls. Co z kolorami?
MS Berends,

29

Możesz uzyskać dużą kontrolę nad sposobem wyświetlania plików za pomocą tego findnarzędzia. lstak naprawdę nie pozwala określić kolumn, które chcesz.

Na przykład:

$ 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

Argument printfakcji jest szczegółowo opisany na stronie podręcznika. Możesz wybrać inną informację o czasie, jaki rozmiar chcesz (rozmiar pliku lub zastosowane bloki dysku), itp. Możesz także uczynić to bezpiecznym dla nietypowych nazw plików, jeśli konieczne jest dalsze przetwarzanie.


Powyższe dane wejściowe do znalezienia („% CY% Cm% Cd.% C ...”) są długie. Co najmniej GNU find ma %C+(wyjście „2016-08-29 + 10: 57: 56.9201257840”) i %Cc(wyjście „Mo 29 sierpnia 2016 10:57:56 CEST”)
guettli

Chciałbym, żeby to działało na komputerach Mac.
Jerinaw,

śliczne, a jeśli chcesz wydrukować tylko pełną ścieżkę i rozmiar, powinno to działać "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Zawsze możesz użyć innego narzędzia, takiego jak awksformatowanie wyniku ls1 :

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


1. Tak, generalnie, nie powinieneś analizować wyniku ls, ale w tym przypadku pytanie specjalnie go wymaga ...


To jednak nie drukuje rozmiaru pliku. I drukuje tylko pierwszą część nazw plików z białymi znakami. I może się nie powieść, jeśli lszostanie alias (powiedzmy alias ls='ls -i'). Naprawdę powinieneś bardzo uważać, jeśli chcesz zająć się analizowaniem wyników ls.
Mat

Miałem tam rozmiar pliku, a następnie go edytowałem (niejasny moment) - przywrócę go. I zgadzam się co do wszystkich analizowanych ostrzeżeń ls, ale tego właśnie chciał OP…
jasonwryan

Nie zgadzam się, OP chce nazw plików, a nie pierwszej części nazw plików, jeśli nazwa pliku zawiera białe znaki. (Korzystanie /bin/lsby uniknąć problemu alias.)
Mat

Rozumie się to domyślnie : jednoznacznie stwierdzono, że OP chce rozwiązania, z lsktórym oboje się zgadzamy, nie spełni wymogu białych znaków. /bin/lsSugestia jest dobry.
jasonwryan

uwielbiam to rozwiązanie; w odniesieniu do poprzednich komentarzy o nie drukowaniu rozmiaru, możesz uzyskać rozmiar za pomocą ls i użyć -hgo, aby był czytelny dla człowieka. W szczególności, że stosuje się: ls -lah | awk '{print $5,$6,$7,$8}'co daje: 4.0K Jan 24 18:17. To prawda, że ​​oryginalne rozwiązanie nie mówi nic o awk, ale w Linuksie powinniśmy założyć, że wyjście procesu zawsze będzie wejściem do innego procesu, prawda? ;)
abgordon

5

Możesz także użyć polecenia „data”. Jest bardzo łatwy w użyciu:

date -r [nazwa pliku]


Fajnie, to było dla mnie nowe. Niestety nie działa dla kilku plików przez globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Jeśli chcesz użyć ls, ale zachowujesz odpowiedni rozmiar, możesz użyć:

ls -Ss1pq --block-size=1

1

gdzie przestrzeń jest zdefiniowana jako separator, a f6 oznacza pole 6

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

2
nie powiodło się, ponieważ ls używa spacji do wcięcia i czasami jest to -f6- innym razem jest to -f5-
Wodnik Moc

1

Możesz potokować dwa polecenia

ls -l|cut -d" " -f5

1
nie powiodło się, ponieważ ls używa spacji do wcięcia i czasami jest to -f6- innym razem jest to -f5-
Wodnik Moc

-1

ls -s1 zwraca rozmiar i nazwę pliku tylko w systemie AIX, nie jest pewne systemu Linux


2
Czy możesz wyjaśnić, w jaki sposób / dlaczego uważasz, że to odpowiada na pytanie?
Scott
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.