Какие параметры мне нужно использовать с find
чтобы исключить скрытые файлы?
8 ответов
Я нашел это здесь:
find . \( ! -regex '.*/\..*' \) -type f -name "whatever"
Это не отвечает на ваш вопрос, но для задачи поиска не скрытых файлов я хотел бы позволить find найти все файлы, а затем отфильтровать с помощью grep.
find . -type f | grep -v '/\.'
Похож на ваш подход, но, возможно, немного проще.
Похоже, что шаблон негатива не известен. Таким образом, вы можете использовать:
find . -name "[!.]*"
Попробуйте следующее использование find
find . -type f -not -path '*/\.*'
Что бы игнорировать все скрытые файлы (файлы и каталоги, начинающиеся с точки).
Если вы стремитесь find
и выполнить grep
, ripgrep
по умолчанию исключает скрытые файлы, например
rg --files
--files
Печатает каждый файл, который будет искать, фактически не выполняя поиск.
fd
Используйте fd
, простую, гораздо более быструю и удобную альтернативу для find
. По умолчанию это:
- По умолчанию игнорирует скрытые каталоги и файлы.
- По умолчанию игнорирует шаблоны из вашего
.gitignore
.
Проверьте контрольный анализ.
Я написал скрипт под названием findnh
который, я считаю, обрабатывает некоторые крайние случаи лучше, чем ответы на этот вопрос, которые я смог найти в Интернете.
#!/bin/bash
declare -a paths
while [ $# -ne 0 ]; do
case "$1" in -*) break ;; esac
paths+=("$1")
shift
done
find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"
Например, вы можете найти не скрытые файлы и каталоги внутри явно указанного скрытого каталога с помощью команды, например findnh ~/.hiddendir/
, которая покажет ~/.hiddendir/file
но не ~/.hiddendir/.superhiddenfile
.
Чтобы найти скрытые файлы:
find -name '[.]*'
Чтобы найти видимые файлы:
find -name '[!.]*'
Это так просто.