На Linux-машине я хотел бы проследить иерархию папок и получить список всех различных расширений файлов в ней.
Каков наилучший способ добиться этого из оболочки?
linux
grep
filesystems
file-extension
GloryFish
источник
источник
.svn
), используйтеfind . -type f -path '*/.svn*' -prune -o -print | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
источникgit ls-tree -r HEAD --name-only
вместоfind
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort | uniq -c | sort -n
Нет необходимости в конвейере
sort
, awk может сделать все это:источник
alias
команды, но сама команда уже использует кавычки в команде поиска. Чтобы исправить это, я бы использовалbash
синтаксис буквальной строки следующим образом:alias file_ext=$'find . -type f -name "*.*" | awk -F. \'!a[$NF]++{print $NF}\''
maindir/test.dir/myfile
-printf "%f\n"
в конец команду 'find' и повторите тест.Рекурсивная версия:
Если вы хотите итоги (как, возможно, раз расширение было замечено):
Не рекурсивный (одна папка):
Я основал это на этом сообщении на форуме , кредит должен идти туда.
источник
git show --name-only --pretty="" | sed -e 's/.*\.//' | sed -e 's/.*\///' | sort -u
Powershell:
Благодаря http://kevin-berridge.blogspot.com/2007/11/windows-powershell.html
источник
.
в которых есть (например,jquery-1.3.4
будет отображаться как.4
в выходных данных). Перейдите на,dir -file -recurse | select-object extension -unique
чтобы получить только расширения файлов.Моя альтернатива, не нуждающаяся в awk, sed и Perl, POSIX-совместимая с Python:
Хитрость в том, что она переворачивает линию и обрезает расширение в начале.
Он также преобразует расширения в нижний регистр.
Пример вывода:
источник
uniq
не имеет полного флага--count
, но-c
работает просто отличноНайдите все с точкой и покажите только суффикс.
если вы знаете все суффиксы имеют 3 символа, то
или с sed показывает все суффиксы от одного до четырех символов. Измените {1,4} на диапазон символов, которые вы ожидаете в суффиксе.
источник
-name "."
вещью, потому что это то, что она уже естьДобавляю свою вариацию в микс. Я думаю, что это самый простой из всех и может быть полезен, когда эффективность не имеет большого значения.
источник
$ find . -type f | grep -o -E '\.[^.\/]+$' | sort -u
В Python использование генераторов для очень больших каталогов, включая пустые расширения, и получение количества раз, когда каждое расширение отображается:
источник
Я попробовал кучу ответов здесь, даже самый лучший ответ. Все они не соответствовали тому, что я специально был после. Таким образом, помимо последних 12 часов сидения в коде регулярных выражений для нескольких программ, чтения и тестирования этих ответов, я пришел к тому, что работает ТОЧНО, как я хочу.
Если вам нужно количество расширений файлов, используйте приведенный ниже код
Хотя выполнение этих методов займет некоторое время и, возможно, не является лучшим способом решения проблемы, они работают.
Обновление: для длинных расширений файлов @ @_989 возникнет проблема. Это связано с оригинальным регулярным выражением "[[: alpha:]] {3,6}". Я обновил ответ, включив в него регулярное выражение "[[: alpha:]] {2,16}". Однако любой, кто использует этот код, должен знать, что эти числа - это минимальное и максимальное значения того, как долго разрешено расширение для окончательного вывода. Все, что находится за пределами этого диапазона, будет разбито на несколько строк на выходе.
Примечание. Исходное сообщение действительно читало "- Greps для расширений файлов от 3 до 6 символов (просто измените числа, если они не соответствуют вашим потребностям). Это помогает избежать кеширования файлов и системных файлов (бит системных файлов предназначен для поиска в тюрьме). "
Идея: Может быть использован для поиска расширений файлов определенной длины через:
Где 4 - это длина расширений файла, которую нужно включить, а затем найти также любые расширения, превышающие эту длину.
источник
Так как уже есть другое решение, которое использует Perl:
Если у вас установлен Python, вы также можете сделать (из оболочки):
источник
Ни один из ответов на данный момент не имеет отношения к именам файлов с символами новой строки должным образом (за исключением ChristopheD, которые только что появились, когда я печатал это). Следующее не является оболочкой с одним вкладышем, но работает и работает достаточно быстро.
источник
Я не думаю, что это было упомянуто еще:
источник
Я думаю, что самый простой и простой способ
Он модифицирован по третьему пути Кристофа.
источник
Вы также можете сделать это
источник
Я нашел это просто и быстро ...
источник
В принятом ответе используется REGEX, и вы не можете создать команду псевдонима с REGEX, вы должны поместить ее в сценарий оболочки, я использую Amazon Linux 2 и сделал следующее:
Я поместил принятый код ответа в файл, используя:
sudo vim find.sh
добавить этот код:
сохраните файл, набрав:
:wq!
sudo vim ~/.bash_profile
alias getext=". /path/to/your/find.sh"
:wq!
. ~/.bash_profile
источник