Число является страницей справочника, к которой оно относится. Каждая страница справочника имеет свою собственную цель, как то, чтобы быть страницей справочника для определения POSIX или определенного определения Linux (для программистов) или страницей справочника для самого использования инструментов, если можно вызвать его от командной строки.
цель определенной страницы справочника покрыта первым разделом
man 8 fsck
покажет Вам определенную страницу
man -a fsck
покажет Вам страницу после страницы после выхода с q
Насколько я знаю, нет никакой опции сказать find
считать шаблоны из файла. Легкое обходное решение должно сохранить шаблоны, которые я хочу исключить в файле и передать тот файл как вход для реверса grep
. Как пример, я создал следующие файлы и каталоги:
$ tree -a
.
├── a
├── .aa
├── .aa.bak
├── a.bck
├── b
├── .dir1
│ └── bb1.bak
├── dir2
│ └── bb2.bak
├── b.bak
├── c
├── c~
├── Documents
│ └── Documents.bak
├── exclude.txt
├── foo.backup
└── Music
└── Music.bak
Если я понял пример, Вы отправили правильно, Вы хотите переместиться a.bck
, .aa.bak
, b.bak
, c~
, foo.backup
и dir2/bb2.bak
к мусору и отпуску .aa.bak
, .dir1/bb1.bak
, Documents/Documents.bak
и Music/Music.bak
где они. Я, поэтому, создал файл exclude.txt
со следующим содержанием (можно добавить столько, сколько Вы хотите):
$ cat exclude.txt
./.*/
./Music
./Documents
Я использую ./.*/
потому что я понял Вашу исходную находку, чтобы означать, что Вы хотите переместить скрытые файлы резервных копий (.foo
) это находится в текущем каталоге, но исключает любые файлы резервных копий, которые находятся в скрытых каталогах (.foo/bar
). Так, я могу теперь работать find
команда и использование grep
исключить нежелательные файлы:
$ find . -type f | grep -vZf exclude.txt | xargs -0 --no-run-if-empty trash-put
Опции Grep:
-v, --invert-match
Invert the sense of matching, to select non-matching
lines. (-v is specified by POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty
file contains zero patterns, and therefore matches
nothing. (-f is specified by POSIX.)
-Z, --null
Output a zero byte (the ASCII NUL character) instead of
the character that normally follows a file name. For
example, grep -lZ outputs a zero byte after each file
name instead of the usual newline. This option makes
the output unambiguous, even in the presence of file
names containing unusual characters like newlines.
This option can be used with commands like find
-print0, perl -0, sort -z, and xargs -0 to process
arbitrary file names, even those that contain newline
characters.
С GNU находят (т.е. в соответствии с невстроенным Linux или Cygwin), можно использовать -regex
объединить все они -path
подстановочные знаки в единственный regex.
find . -regextype posix-extended \
-type d -regex '\./(\..*|Music|Documents)' -prune -o \
-type f -regex '.*(\.(bck|bak|backup)|~)' -print0 |
xargs -0 --no-run-if-empty trash-put
С FreeBSD или OSX, использовать -E
вместо -regextype posix-extended
.
Это, кажется, больше вопрос об оболочке, чем a find
вопрос. С файлом, содержащим ( -name dir1 -o -name dir2 ) -prune
(не "\"!) можно просто сделать это:
find ... $(< /path/to/file)
Не изменяя находку называют себя (к eval find
или путем изменения $IFS), это работает с путями без пробела только, все же.
Если Вы хотите сохранить файл более простым, можно записать сценарий.
# file content
dir1
dir2
dir3
# script content
#!/bin/bash
file=/path/to/file
# file may be checked for whitespace here
grep '[^[:space:]]' "$file" | { empty=yes
while read dir; do
if [ yes = "$empty" ]; then
echo -n "( "
empty=no
else
echo -n " -o "
fi
echo -n "-name ${dir}"
done
if [ no = "$empty" ]; then
echo -n " ) -prune"
fi; }
И используйте
find ... $(/path/to/script)
вместо этого.
-name
path
).
– Hauke Laging
29.04.2013, 19:27
\( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
исключить определенные каталоги из рекурсивного поиска это find
делает. Я ничего не ищу в файлах, а скорее удаляю определенные файлы и избегаю определенных каталогов в моем пути поиска. Я не понимаю то, что Ваш сценарий пытается сделать также. Так, кажется, что у нас есть отсутствие передачи.Прошу прощения. Давайте оставим его в этом.
– chandra
29.04.2013, 20:48
Группа -path ... -prune
в одно выражение, заключенное в \ (... \)
с использованием логики -o
( или ).
find /somepath \( -path /a -prune -o \
-path /b -prune -o \
-path /c -prune \
\) \
-o -print
В примере не выполняется итерация каталогов или файлов в или ниже / somepath / a
, / somepath / b
и / somepath / c
.
Вот более конкретный пример использования нескольких действий.
find / \( -path /dev -prune -o \
-path /proc -prune -o \
-path /sys -prune \
\) \
-o -printf '%p ' -exec cksum {} \;