Na komputerze z systemem Linux chciałbym przejrzeć hierarchię folderów i uzyskać listę wszystkich różnych rozszerzeń plików w jej obrębie.
Jaki byłby najlepszy sposób na osiągnięcie tego z powłoki?
linux
grep
filesystems
file-extension
GloryFish
źródło
źródło
.svn
), użyjfind . -type f -path '*/.svn*' -prune -o -print | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
źródłagit ls-tree -r HEAD --name-only
zamiastfind
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort | uniq -c | sort -n
Nie potrzeba do rury
sort
, awk można zrobić wszystko:źródło
alias
polecenia, ale samo polecenie już używa cudzysłowów w poleceniu find. Aby to naprawić,bash
alias file_ext=$'find . -type f -name "*.*" | awk -F. \'!a[$NF]++{print $NF}\''
maindir/test.dir/myfile
-printf "%f\n"
na końcu polecenia „znajdź” i ponownie uruchom test.Wersja rekurencyjna:
Jeśli chcesz mieć sumy (jak może być widoczne rozszerzenie):
Brak rekurencji (pojedynczy folder):
Oparłem to na tym wpisie na forum , kredyt powinien się tam znaleźć.
źródło
git show --name-only --pretty="" | sed -e 's/.*\.//' | sed -e 's/.*\///' | sort -u
PowerShell:
Dzięki http://kevin-berridge.blogspot.com/2007/11/windows-powershell.html
źródło
.
w nich (np.jquery-1.3.4
Pokażą się jak.4
na wyjściu). Zmień, abydir -file -recurse | select-object extension -unique
uzyskać tylko rozszerzenia plików.Moja bezkompromisowa, bez sed, bez Perla, bez Pythona alternatywa zgodna z POSIX:
Sztuka polega na tym, że odwraca on linię i odcina rozszerzenie na początku.
Konwertuje również rozszerzenia na małe litery.
Przykładowe dane wyjściowe:
źródło
uniq
nie ma pełnej flagi--count
, ale-c
działa dobrzeZnajdź wszystko za pomocą kropki i pokaż tylko przyrostek.
jeśli wiesz, że wszystkie przyrostki mają 3 znaki, to
lub z sesem pokazuje wszystkie sufiksy od jednego do czterech znaków. Zmień {1,4} na zakres znaków, których oczekujesz w sufiksie.
źródło
-name "."
, ponieważ tak już jestDodanie własnej odmiany do miksu. Myślę, że jest to najprostszy z możliwych i może być użyteczny, gdy wydajność nie stanowi dużego problemu.
źródło
$ find . -type f | grep -o -E '\.[^.\/]+$' | sort -u
W Pythonie używanie generatorów dla bardzo dużych katalogów, w tym pustych rozszerzeń, i uzyskiwanie liczby wyświetleń każdego rozszerzenia:
źródło
Próbowałem tutaj wielu odpowiedzi, nawet „najlepszych”. Wszyscy wymyślili coś, czego nie chciałem. Oprócz ostatnich 12 godzin siedzenia w kodzie wyrażeń regularnych dla wielu programów oraz czytania i testowania tych odpowiedzi, to właśnie wymyśliłem, który działa DOKŁADNIE tak, jak chcę.
Jeśli potrzebujesz liczby rozszerzeń plików, użyj poniższego kodu
Chociaż wykonanie tych metod zajmie trochę czasu i prawdopodobnie nie są to najlepsze sposoby rozwiązania problemu, działają one.
Aktualizacja: Rozszerzenia plików Per @ alpha_989 spowodują problem. Wynika to z pierwotnego wyrażenia regularnego „[[: alpha:]] {3,6}”. Zaktualizowałem odpowiedź, dodając wyrażenie „[[: alpha:]] {2,16}”. Jednak każdy, kto używa tego kodu, powinien mieć świadomość, że liczby te są minimalną i maksymalną długością dozwolonego rozszerzenia dla końcowego wyniku. Wszystko poza tym zakresem zostanie podzielone na wiele wierszy na wyjściu.
Uwaga: w oryginalnym poście było napisane „- Greps dla rozszerzeń plików od 3 do 6 znaków (po prostu dostosuj liczby, jeśli nie pasują do twoich potrzeb). Pomaga to uniknąć plików pamięci podręcznej i plików systemowych (bit pliku systemowego służy do wyszukiwania w więzieniu). „
Pomysł: może być używany do znajdowania rozszerzeń plików o określonej długości za pomocą:
Gdzie 4 to długość rozszerzeń plików, które należy uwzględnić, a następnie znajdź także wszelkie rozszerzenia poza tą długością.
źródło
Ponieważ istnieje już inne rozwiązanie korzystające z Perla:
Jeśli masz zainstalowany Python, możesz również zrobić (z powłoki):
źródło
Żadna z dotychczasowych odpowiedzi nie dotyczy poprawnie nazw plików z nowymi wierszami (z wyjątkiem ChristopheD, które właśnie pojawiły się podczas pisania tego tekstu). Poniższy przykład nie jest pojedynczą linią powłoki, ale działa i jest dość szybki.
źródło
Nie sądzę, żeby ten był jeszcze wspomniany:
źródło
Myślę, że najprostszym i najprostszym sposobem jest
Jest modyfikowany na 3. sposób ChristopheD.
źródło
możesz to zrobić
źródło
Znalazłem to proste i szybkie ...
źródło
Zaakceptowana odpowiedź używa REGEX i nie możesz utworzyć polecenia aliasu za pomocą REGEX, musisz umieścić go w skrypcie powłoki, używam Amazon Linux 2 i wykonałem następujące czynności:
Wstawiam zaakceptowany kod odpowiedzi do pliku, używając:
sudo vim find.sh
dodaj ten kod:
zapisz plik, wpisując:
:wq!
sudo vim ~/.bash_profile
alias getext=". /path/to/your/find.sh"
:wq!
. ~/.bash_profile
źródło