Объединение, пересечение и исключение с помощью команды FIND? - PullRequest
0 голосов
/ 22 мая 2009

Мне нужно управлять списками с помощью команды find. Предположим, что списки имеют случайные имена в нечетких списках (т.е. их пересечение не является пустым набором). Как я могу сделать:

A \ B

найти файлы в списке A, кроме файлов в списке B

Пересечение B

найти файлы, общие для списков A и B

Пожалуйста, проконсультируйтесь здесь.

штуцер B

найти все файлы в двух списках

Примеры

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

.zcompdump
.zshrc
.bashrc
.emacs

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

.bashrc
.emacs
.gdbinit
.git

Я хочу:

A \ B :

.zcompdump
.zshrc

A Пересечение B :

.bashrc
.emacs

Союз B :

.zcompdump
.zshrc
.bashrc
.emacs
.bashrc
.emacs
.gdbinit
.git

Попытка пересечения

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

find -f all_files -and -f right_files .

Вопросы возникли из вопроса:

  1. find ~ / bin / FilesDvorak /.* -maxdepth 0 -и ~ / .PAST_RC_files /.*

  2. Пожалуйста, обратитесь к рекурсивной находке <а HREF = "https://stackoverflow.com/questions/895724/how-can-i-combine-the-find-commands">Click здесь!

  3. find ~ / bin / FilesDvorak /.* -maxdepth 0 - и список

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

Серьезно, это то, для чего предназначен comm (1). Я не думаю, что справочная страница могла бы быть намного понятнее: http://linux.die.net/man/1/comm

1 голос
/ 22 мая 2009

Существует несколько инструментов, которые могут помочь вам найти пересечение в списках файлов. «найти» не один из них. Функция Find предназначена для поиска файлов, соответствующих определенным критериям в файловой системе.

Вот несколько способов найти ваш ответ.

Для создания двух списков файлов

find . -maxdepth 1 | sort > a
(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort > b)

Теперь у вас есть два файла a и b, которые содержат записи каталога без повторения в подкаталогах. (Чтобы удалить ведущий ./ вы можете добавить «sed -e 's /^.///» или вашу первую команду awk между операциями поиска и сортировки)

Чтобы найти Союз

cat a b | sort -u 

Чтобы найти A \ B

comm -23 a b 

Чтобы найти пересечение

comm -12 a b

'man comm' и 'man find' для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...