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?

Mały palec u ręki
źródło
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" *
f4m8
źródło
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.

Mata
źródło
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 ...

jasonwryan
źródło
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]

Ankit Khare
źródło
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
Głęboki
źródło
1

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

ls -lt | cut -d" " -f6-
zzapper
źródło
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
Deepak
źródło
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

cacflyer
źródło
2
Czy możesz wyjaśnić, w jaki sposób / dlaczego uważasz, że to odpowiada na pytanie?
Scott