Nie wiem, czy ls
jest w stanie wyświetlić kolumnę typu pliku.
Szybkie wyszukiwanie online i wyszukiwanie man
nie ujawniło takiej możliwości. Czy jest w stanie to zrobić?
Wyjaśnienie: Jest to szczególnie przydatne, jeśli pliki nie mają rozszerzenia.
Aktualizacja
Na dzień 28.04.2018 odpowiedzi były dość interesujące, ale nie zawierały tego, czego szukałem. Dokładniej,
file
podaje rzeczywiste typy plików, ale nie integruje się dobrzels
. W szczególności używamls -lhtrpG --group-directories-first --color=always
ls -F
jestls
rozwiązaniem, jednak zapewnia symbole, a nie kolumnę rzeczywistych typów plików.
Z tego powodu nie zaznaczyłem żadnej odpowiedzi jako odpowiedzi, której szukam.
command-line
ls
użytkownik10853
źródło
źródło
ls -lahtrpF --group-directories-first --color=always /dev
lubls -lsahG /dev
, i dla czytelnego dla programuls -lsa /dev
. szczegóły wman ls
dokumentacji.Odpowiedzi:
file
to zdecydowanie właściwy wybór, aby uzyskać żądane informacje o typie pliku. Aby połączyć wyniki z wynikamils
sugeruję użyciefind
:Znajduje każdy plik w bieżącym katalogu i wypisuje dane wyjściowe,
ls -dils
jak również dane wyjściowefile -b
, każdy w osobnym wierszu. Przykładowe dane wyjściowe:Ale ponieważ nie chcesz linii typu pliku , a raczej kolumny typu pliku , oto sposób na pozbycie się znaku nowej linii między wierszami:
Przykładowe dane wyjściowe:
Ta nowa kolumna jest dość długa, więc odetnijmy wszystko od pierwszego przecinka:
Wynik tego wygląda następująco:
To nie jest całkiem przydatne, więc co powiesz na
alias
? W poniższym wierszu w~/.bash_aliases
pliku wystarczy uruchomić,lsf
aby uzyskać powyższe dane wyjściowe dla bieżącego katalogu.źródło
paste
lubcolumn
, możesz uzyskać lepsze wyrównanie:lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }
Problem wyrównania nie jest widoczny w odpowiedzi z powodu podobnych rozmiarów i dat. (Będzie to również nieco szybsze, ponieważ polecenia będą wywoływane mniej razy zamiast raz na plik.)column
podejście działa dla Ciebie? Po prostu wypisuje dane wyjściowels -l
dla każdego pliku, a następniefile
dane wyjściowe dla każdego pliku dla mnie, tak jakby powłoka po prostu zrobiłals -l "$@"; file -b "$@" | cut -d, -f1
…/etc
.column
dane wyjściowe nie są wysyłane do terminala, musisz określić liczbę kolumn lub wyśle pliki jeden po drugim; więccolumn -c "$COLUMNS" ...
powinno działać w obu przypadkach.Myślę, że najlepszym sposobem wyświetlenia typu pliku jest użycie tego polecenia:
Jeśli chcesz wyświetlić listę typów wszystkich plików w katalogu, użyj:
Aby uzyskać więcej informacji na temat argumentów, zobacz:
źródło
mime type
tylko za pomocą:file --mime-type filename
.file
całkiem dobrze, ale to pytanie jest inne.file
odpowiedzi. Gdy odpowiedziałem innym, to nie wystarcza (musi być zintegrowane z ls), więc głosuję dalej. Dziękuję Ci.file --mime /dev/*
dla listy mimów w katalogu / dev zamiast bieżącejDla jasności zamierzam wskazać, że można zobaczyć typ pliku w podstawowym sensie za
ls
pomocą-F
flagi (klasyfikuj), która dołącza symbol do nazwy pliku w zależności od jego typu:Możesz jednak zobaczyć te informacje nieco mniej zaszyfrowane wyświetlane w pierwszej literze wyniku
ls -l
. Odpowiedź wjandrea opisuje to bardziej szczegółowo.Ale nie sądzę, że to właśnie rozumiesz przez typ pliku.
ls
Komenda nie wygląda wewnątrz regularne plików - tylko na listach katalogów (które przechowują nazwy plików) i-węzłów (których metadane sklep, w tym „typu” w sensie wspomniano wcześniej).Tak więc
ls
polecenie nie może wyświetlić typu pliku w sensie, czy jest to obraz JPG, plik binarny, plik tekstowy lub dokument LibreOffice, ponieważ nie ma tych informacji.W tym celu, jak wskazuje odpowiedź singrium , potrzebujesz
file
polecenia, które sprawdza około 50-100 kB zawartości plików, aby określić ich typ.źródło
Jedną z form typu pliku jest to, czy plik jest zwykłym plikiem, katalogiem, urządzeniem, dowiązaniem symbolicznym itp.
ls
Może to pokazać za pomocą opcji-l
lub-F
.Opcja
-l
pokaże typ pliku jako pojedynczy znak na początku listy, np .:Gdzie
-
jest zwykły plik,d
jest katalogiem il
jest dowiązaniem symbolicznym.Opcja
-F
wyświetli typ pliku jako sufiks, np .:Gdzie żaden przyrostek nie jest zwykłym plikiem,
/
jest katalogiem i@
dowiązaniem symbolicznym.Więcej informacji na ten temat można znaleźć
info coreutils 'ls invocation'
tutaj:Dla
-l
:Dla
-F
:źródło