Исключите каталоги в, определяют местоположение поиска

проверить /etc/hosts конфигурации

12
04.04.2015, 05:02
7 ответов

С ZSH ZSH :

print -rl ${(0)^"$(locate -0 ...)"}(N.)

(0) представляет собой флаг расширения параметров, который разбивает на символов Nul (как мы используем , найдите -0 ), короткие для (PS: \ 0:) .

С ^ , вместо добавления (n.) в конце массива мы добавляем его в каждый элемент.

(n.) - квалификатор GLAC, . Чтобы соответствовать только обычным файлам n n n , чтобы удалить элемент, если он не совпадает (не существует или не является обычным файлом, или мы не можем проверить). Вы также можете использовать ^ / вместо . соответствовать не каталогам, а не только обычным файлам.

Print -RL печатает каждый аргумент RAW на отдельной строке .

Вы можете использовать любые ZSH Challifiers Challifiers , но обратите внимание, что упорядочение не будет никакого эффекта, так как мы расширяем один шар на файл здесь, так что есть только один файл для сортировки для каждого.

(Обратите внимание, что он может потерпеть неудачу, если последний файл, представленный , находит , заканчивается .

3
27.01.2020, 19:56

Это примерно такой же неэлегантный, как и другие ответы, но, возможно, менее неэффективный:

locate --regex --basename "xfce4-keyboard-overlay$" | 
        while IFS= read -r f; do [ -f "$f" ] && printf "%s\n" "$f"; done

(разбит на две строки для удобства чтения). Вышеупомянутое будет обрабатывать имена, содержащие пробелы. IFS = кажется необходимым для обработки имен с завершающими пробелами, и, конечно же, -r позволяет обрабатывать обратную косую черту.

Подход «давайте трубку найдем во что-то» может быть обречен на провал , если присутствуют пути, содержащие символы новой строки.


Для получения дополнительной информации о IFS прочтите sh (1) или bash (1) (набрав man sh или man bash в систему * nix, и / или чтение здесь , здесь , { {1}} здесь , и / или здесь ). Затем прочтите Общие сведения о IFS и Bash: читайте построчно с IFS на Stack Exchange (сосредоточьтесь на ответах, набравших более 5 голосов) , и, если вам все еще не хватает, посмотрите IFS на вики Грега и результаты поиска IFS на Bash Hackers Wiki (не на Stack Exchange).

3
27.01.2020, 19:56
locate --null --regex --basename "xfce4-keyboard-overlay$" |
  xargs -r0 sh -c 'find "$@" -prune ! -type d' sh
2
27.01.2020, 19:56

Что, если вы сочетаете , найдите с файлом и GREP ? ...

$ for f in `locate --regex --basename "xfce4-keyboard-overlay$"`; do file $f; done | grep -vi directory
-1
27.01.2020, 19:56

XARGS будет повторять команду для каждой строки, если вы укажете -L 1 или -I параметр.

Как правильно понимают

$ locate --regex --basename "xfce4-keyboard-overlay$" | xargs -i bash -c '(test -d "{}" && echo "{}")'

$ locate --regex --basename "xfce4-keyboard-overlay$" | xargs -i bash -c '(test -d "{}" && echo "{}")'

, он пикирует новую оболочку для каждого файла, но у него выгодно быть хорошими и компактными.

Редактировать: Я не был вполне доволен этим ответом, потому что он пинал новой оболочки для каждого файла. Это должно иметь только два процесса:

$ locate --regex --basename "xfce4-keyboard-overlay$" | xargs -i echo 'test -d "{}" && echo "{}"' | bash

Конечно, было бы неплохо, если бы мы могли избежать вообще преодоления переводчика, но Xargs , кажется, увлекается в его способность цепи командовать.

1
27.01.2020, 19:56

My two cents:

while IFS= read i; \
do \
  if [ -f "$i" ]; \
  then \
    echo "$i"; \
  fi; \
done < <(locate --regex --basename "xfce4-keyboard-overlay$")

Это более или менее то, как G-Man делал это в сочетании с заменой процесса.

0
27.01.2020, 19:56

Используйте

file $(locate -r 'xfce4-keyboard-overlay$') | grep -v directory$ | awk -F: '{ $(NF--)=""; print }'

Пояснение:

  1. locate...находит все файлы и каталоги
  2. file $(...)добавляет в конце каждой строки сообщение с типом файла
  3. grep -v...реверс -фильтрует строки, содержащиеdirectory$
  4. awk...удаляет добавленное file...
0
13.02.2021, 00:46

Теги

Похожие вопросы