Иногда я знаю, что файл не так глубоко, но очень плотный подкаталог не позволяет мне легко найти файлы, которые я хочу.
Может find (или любой другой инструмент) искать файлы с использованием поиска в ширину?
Иногда я знаю, что файл не так глубоко, но очень плотный подкаталог не позволяет мне легко найти файлы, которые я хочу.
Может find (или любой другой инструмент) искать файлы с использованием поиска в ширину?
Да, вроде.
Вы можете использовать параметр -depth
, чтобы заставить его обрабатывать содержимое каталога перед самим каталогом. Вы также можете использовать опцию -maxdepth
, чтобы ограничить количество загружаемых каталогов.
Ужасный взлом, не будет работать с -0
или другими действиями, отличными от -print
, неэффективными и т.д. и т.д....
#!/bin/bash
i=0
while results=$(find -mindepth $i -maxdepth $i "[email protected]") && [[ -n $results ]]; do
echo "$results"
((i++))
done
В основном это просто выполняется
find -mindepth 0 -maxdepth 0
find -mindepth 1 -maxdepth 1
find -mindepth 2 -maxdepth 2
…………………………………………………………………………
до find
возвращает ненулевой статус или ничего не печатает.
В первой строке найдите переменную как свою очередь.
Создать bfs.sh
#!/bin/bash
queue="$1"
shift
while [ -n "$queue" ]
do
echo "$queue" | xargs -I'{}' find {} -mindepth 1 -maxdepth 1 $*
queue=`echo "$queue" | xargs -I'{}' find {} -mindepth 1 -maxdepth 1 -type d`
done
Сделайте его исполняемым:
$ chmod u+x ./bfs.sh
Затем вы можете выполнить поиск по ширине:
$ ./bfs.sh /path/to/somewhere -name foobar
Используйте find
с опцией --maxdepth
.
То есть в разделе Directories на странице справки; может найти другие варианты, более подходящие в зависимости от ваших потребностей.
Чтобы добиться точного поиска по ширине, вам понадобится цикл со смешанными параметрами --mindepth
и --maxdepth
. Но, я не думаю, что нужно быть таким точным, обычно будет ограниченный поиск по глубине.
find . | awk '{FS = "/" ; print "", NF, $F}' | sort -n | awk '{print $2}' | xargs grep -d skip "search term"
Он использует find для отображения всех файлов. Первая команда awk подсчитывает все символы "/". Он сортирует по счету, а затем отбрасывает столбец count. Наконец, он использует xargs для grep отсортированного списка файлов.
Это действительно уродливо.