Я пытаюсь найти все XML
файлы в определенном каталоге и все подкаталоги (рекурсивно) внутри него.
ls -R *.xml
только список файлов в текущем каталоге. Я совершенно уверен, что у самих подпапок есть несколько .xml
файлов, но ни один не обнаруживается.
Это проблема конфигурации?
ls -R | grep .xml
Ответы:
Попробуйте использовать Find
источник
find
передls -R
?find
иgrep
, когдаfind
можно выполнять фильтрацию, используя как регулярные выражения, так и глобусы, и не использоватьfind
s-print0
и grep,-z
когда вам нужно смешать.Вы можете сделать это только с помощью find :
.
это текущий каталог. Если вам нужно выполнить поиск в другом каталоге, замените его.
на путь к каталогу.источник
.php
файлы в текущем каталоге. Но он возвращал только.php
файлы в текущем каталоге, не проводил рекурсивный поиск в подкаталогах. Вот почему я спрашиваю,find
выполняет ли команда рекурсивный поиск или нет.find
команда ищет рекурсивно. Если вы не заключите в кавычки параметр, я думаю, что ваша оболочка может выполнить расширение*
, поэтому она будет соответствовать файлам в текущем каталоге.Попробуйте эту команду:
ls
не имеет параметров для фильтрации вывода. Для этого вам нужно будет использовать трубу. Это передает выходные данные изls
вgrep
, который затем фильтрует их, чтобы показать только.xml
файлы.источник
ls
?удар
Использование
globstar
опции оболочки, мы можем использовать рекурсивное глобирование./**/*
Perl
В Perl есть модуль
Find
, который позволяет выполнять рекурсивный обход дерева каталогов. Внутри специальнойfind()
функции мы можем определить требуемую подпрограмму и каталог, который мы хотим пройти, в этом примере это.
. Однострочник в таком случае будет:питон
В то время как Perl имеет целый модуль, предназначенный для рекурсивного обхода дерева, Python имеет аккуратную функцию,
walk()
которая является частьюos
модуля, и многократно возвращает кортеж верхнего пути, список всех подкаталогов и список имен файлов. Мы можем сделать следующее:Это может быть гораздо лучше, как сценарий:
находить
Другие ответы были упомянуты
find
для рекурсивного обхода, и это инструмент перехода к работе. Что нужно упомянуть, так это тот факт, чтоfind
имеется несколько ключей командной строки, например,-printf
для вывода выходных данных в нужном формате,-type f
для поиска только обычных файлов,-inum
для поиска по номеру индекса,-mtime
для поиска по дате изменения,-exec <command> {} \;
для выполнения определенной команды для обработки файла. с передачей файла в качестве аргумента (где{}
стандартнаяfind
метка-заполнитель для текущего файла) и многими другими, поэтому, пожалуйста, прочитайте страницу руководства дляfind
.источник