РЕШЕНО - find (Find найти сразу файлы и папки)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
v4567
Сообщения: 162
ОС: Devuan

РЕШЕНО - find

Сообщение v4567 »

Это какой то ужас.

Не работают следующие виды объединений в find:

Код: Выделить всё

find . -type f d
find . -type f -type d
find . -type f -o -type d
find . \( -type f -o -type d \)
Как быть если надо сразу найти (две команды подряд не вариант) и файлы и папки, но не ссылки?
Последний раз редактировалось v4567 24.04.2019 18:01, всего редактировалось 1 раз.
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: find

Сообщение v4567 »

И сразу в догонку можно ли при помощи find получить название не самой ссылки, а файла или папки на который она указывает, даже если их нет в наличии (битая ссылка)? Всё что удалось найти в мане, вот такой
вариант:

Код: Выделить всё

find -L "/dir" -type -l
но он не работает.
Вот такой код выдаёт перечень всех файлов:

Код: Выделить всё

find -L "/dir"
Добавлено (23:47):
Надо сравнить в двух директориях не сами названия ссылок, а куда они указывают, даже если файла или папки на которые они указывают нету. Потом найти одинаковые и вывести уже названия самих ссылок, а не то куда они указывают.

Я уже решил эту задачу но через массивы. Всё работает но когда файлов и ссылок несколько сотен тысяч, то запись в массив, потом сравнение, потом вывод с массива затягивают работу скрипта минут на сорок.
Можно ли как то обойтись без массивов?Если обойтись без массивов, просто какими то бинарными командами, то всё я думаю сократиться до секунд, ну может быть минут.
Добавлено (23:48):
Извиняюсь за неправильно поставленный вопрос в начале этого поста.

Мне надо найти все виды файлов кроме директорий и ссылок. Отрицание не поможет.
Нужно типа:

Код: Выделить всё

find . -type f -type b -type c -type p -type s
Добавлено (23:52):
Меня наверное на этом форуме забанят.
Добавлено (00:27):
Извиняюсь я уже сдурел, мозги взрываются.
Действительно вот такая конструкция работает:

Код: Выделить всё

find . \( -type f -o -type b -o -type c -o -type p -o -type s \) -printf '%f\n'
По поводу ссылок, вот более вразумительное изложение.
Есть две директории со вложенными директориями внутри, расположенные в разных местах, например одна
прямо в корне /dir, а вторая в папке пользователя /home/user/dir

В них есть ссылки которые ссылаются внутри этих директорий (относительные пути) на файлы и папки, из этих файлов и папок некоторые могут быть, а некоторых может и не быть (битые ссылки). Надо найти ссылки которые ссылаются на одинаковые файлы (относительный путь и название файла) и одинаковые папки (относительный путь и название папки), даже если некоторые из этих ссылок будут битые. И вывести названия этих ссылок и битых то же, именно ссылок а не название файлов и папок на которые они ссылаются.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: find

Сообщение Bizdelnick »

v4567 писал:
22.04.2019 23:21
Не работают следующие виды объединений в find
У меня работают find . -type f,d (гнуизм) и find . -type f -o -type d. Что за find Вы используете?
Добавлено (13:44):
v4567 писал:
22.04.2019 23:26
Мне надо найти все виды файлов кроме директорий и ссылок. Отрицание не поможет.
Почему? У меня работает find . ! -type d,l.
Добавлено (13:49):
v4567 писал:
22.04.2019 23:26
можно ли при помощи find получить название не самой ссылки, а файла или папки на который она указывает, даже если их нет в наличии (битая ссылка)?
find . -type l -exec readlink {} + (readlink — это тоже гнуизм).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: find

Сообщение olecya »

Bizdelnick писал:
23.04.2019 13:41
У меня работают find . -type f,d (гнуизм)
Наверное это продвинутый гнуизм )))

Shell

[nez@rox]$ echo $MACHTYPE && find -type f,l
x86_64-redhat-linux-gnu
find: Аргументы -type должны быть односимвольными
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: find

Сообщение Bizdelnick »

Shell

% find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Эрик Б. Декер (Eric B. Decker), Джеймс Янгмен (James Youngman), and Кэвин Дэлли (Kevin Dalley).
Включённые возможности: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить