33

Какие параметры мне нужно использовать с find чтобы исключить скрытые файлы?

8 ответов8

14

Я нашел это здесь:

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"
12

Это не отвечает на ваш вопрос, но для задачи поиска не скрытых файлов я хотел бы позволить find найти все файлы, а затем отфильтровать с помощью grep.

find . -type f | grep -v '/\.'

Похож на ваш подход, но, возможно, немного проще.

11

Похоже, что шаблон негатива не известен. Таким образом, вы можете использовать:

find . -name "[!.]*"
7

Попробуйте следующее использование find

find . -type f -not -path '*/\.*'

Что бы игнорировать все скрытые файлы (файлы и каталоги, начинающиеся с точки).

1

Если вы стремитесь find и выполнить grep , ripgrep по умолчанию исключает скрытые файлы, например

rg --files

--files Печатает каждый файл, который будет искать, фактически не выполняя поиск.

1

fd

Используйте fd , простую, гораздо более быструю и удобную альтернативу для find . По умолчанию это:

  • По умолчанию игнорирует скрытые каталоги и файлы.
  • По умолчанию игнорирует шаблоны из вашего .gitignore .

Проверьте контрольный анализ.

1

Я написал скрипт под названием 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 .

0

Чтобы найти скрытые файлы:

find -name '[.]*'

Чтобы найти видимые файлы:

find -name '[!.]*'

Это так просто.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .