2009-05-21 6 views
0

Мой last question расширен, поэтому давайте проанализируем вещи отдельно.Как работает оператор AND в команде FIND?

AND-operater, пересечение?

Я приведу пример:

$ find . | awk -F"/" '{ print $2 }' 

.zcompdump 
.zshrc 
.zshrc_copy 
.zshrc_somequy 
.bashrc 
.emacs 

$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }' 

.bashrc 
.emacs 
.gdbinit 
.git 
.profile 

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

find -f all_files -and -f right_files . 

Я хочу только :

.bashrc 
.emacs 
+1

По крайней мере, для Linux и Solaris и CygWin нет теста «-f» для поиска. Возможно, есть на OSX. Если нет, это может быть частью вашей проблемы. – Eddie

ответ

1

Чтобы немного расширить ответ Дейва:

Вы кажетесь хотите пересечение двух команд найти. Найти не делает набор манипуляций. Найдите траверсы вниз (или вверх в зависимости от того, как вы смотрите на него) набор путей и применяете выражение для каждого элемента, с которым он сталкивается. Требуемое по умолчанию действие заключается в том, чтобы напечатать путь найденных элементов, которые оценивают true для выражений. (Я считаю, что некоторые старые версии find требовали, чтобы вы явно добавляли выражение -print.) Он не сопоставляет результаты. Для анализа пересечений вы можете использовать такие инструменты, как diff, sdiff, comm.

Я предполагаю, что вы пытаетесь найти элементы с тем же именем в двух отдельных каталогах, а не в подкаталогах.

Предполагая Баш вы можете сделать что-то вроде

comm -12 <(find . -maxdepth 1 | sort) <(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort) 

Я считаю, что -И в командах найти почти всегда лишнее. Ex.

find . -type f ! -type d 

То же самое,

find . -type f -and ! -type d 

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

1

- и работает только на испытаниях. Если вы хотите, чтобы найти общие элементы двух списков вы должны сделать что-то вроде

sort all_files > all_files.sorted 
sort right_files > right_files.sorted 
comm -12 all_files right_files > common_files 
+1

Таким образом, опция -12 означает пересечение двух файлов. Очевидно, не имеет значения, напишите ли вы вариант -12 или -21. –

0

элемент И -option в человеке

оператора -and является логическим и оператором. Поскольку это , подразумеваемое сопоставлением двух выражений, это делает не обязательно указывать. Выражение принимает значение : true, если оба выражения истинны. Второе выражение не оценивается, если первое выражение является ложным.

Эта часть руководства довольно загадочна для меня. Однако давайте проанализируем это.

1-е предложение: как оператор И в математике. Два двух 1с только!

2nd sentente: Это говорит о том, что вам не нужно использовать команду, как вы можете видеть в ответе Дейва. Большой! - - Кажется, juxpose первое выражение с -AND и выражением без -AND. Прошу прояснить этот греческий язык мне.

3-е предложение: повторение: оно говорит то же самое в первом предложении словом «логический».

четвёртое предложение: repeation: Он говорит, что 01 означает ложные

То же самое на английском языке:

Пусть р и д два выражения со следующей истины valuas

p q pANDq 
1 1 1 
1 0 0 
0 1 0 
0 0 0 

где 1 означает true, а 0 - false.

Обратите внимание, что руководства содержат часто избыточное описание и иногда ошибки.