View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003443 | Far Manager | FindFiles | public | 2017-06-08 14:39 | 2017-06-15 01:21 |
Reporter | shmuel | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | 7 |
Product Version | 3.0 | ||||
Summary | 0003443: Среди результатов поиска Find File одни и те же файлы могут быть включены многократно | ||||
Description | Среди результатов поиска Find File одни и те же файлы могут быть включены многократно. Это происходит, если в путях поиска есть Junctions и/или Symlinks. | ||||
Steps To Reproduce | Windows 7 Pro SP1 x64, Far 3.0.4972 x86. Ищем файлы с маской *.txt внутри папки C:\Users с опциями "From the current folder" и "Search in symbolic links". Find File (AltF7) находит 1007 файлов. dir /s /a *.txt находит 398 файлов. | ||||
Additional Information | Все пути из списка файлов, найденных с помощью "Find File", были преобразованы скриптом в эквивалентные пути, не содержащие Junctions или Symlinks. После удаления дубликатов оказалось, что количество файлов, оставшихся в списке, равно количеству файлов, выведенных командой dir, а именно, 398. Следовательно, некоторые файлы были представлены в списке 2 и более раз. См. также обсуждение на форуме. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Проблема индейцев |
|
У меня в плагине есть и операция замены из панелей. Если один и тот же файл находить несколько раз, то и замены будут произведены несколько раз, что уже совсем будет плохо. |
|
Интересно, что был период, когда AltF7 находил без дубликатов, а именно 398 файлов в моём эксперименте: билд 1807 - найдено 1007 файлов билд 3400 - найдено 1007 файлов билд 3608 - найдено 1125 файлов билд 4503 - найдено 1125 файлов билд 4702 - найдено 398 файлов билд 4795 - найдено 398 файлов билд 4797 - найдено 1007 файлов билд 4972 - найдено 1007 файлов |
|
Был. Но с побочными эффектами. Выбор любого варианта как единственно правильного не будет устраивать всех. |
|
0003255, на который вы ссылаетесь, разве имеет отношение к поиску по AltF7, там же о копировании идёт речь? |
|
Насколько я помню, в обоих случаях используется ScanTree. |
|
Внутренняя кухня Фара к делу относиться не должна. Если используется одна и та же внутренняя функция, значит её можно вызывать с разными параметрами. Если нужного параметра нет - можно добавить. |
|
Сейчас параметра нет. Можете добавить что-нибудь вроде FSCANTREE_DEDUP = 0x00000008 Код который был до b4796, вроде бы с этим справлялся. Правда не уверен, что все будут согласны с тем, что поиск должен работать так... |
|
> Проблема индейцев Смешалисьвкучуконилюди. Эксперименты "до b4796" к конкретно этому случаю не относятся вообще никак. dir не находит дубликаты, потому что не заходит в All Users, Default User, Application Data, Documents и прочие симлинки в профиле, а не заходит он туда потому что делать это явно запрещено через ACL. Far же, видя, что к симлинку нет доступа, вытаскивает из него реальный путь и идёт уже туда. Проверить можно хотя бы так: Index: farwinapi.cpp =================================================================== --- farwinapi.cpp (revision 14957) +++ farwinapi.cpp (working copy) @@ -397,7 +397,7 @@ if (!Handle && GetLastError() == ERROR_ACCESS_DENIED) { - if (ScanSymLink) + if (false) { auto strReal = Object; // only links in path should be processed, not the object name itself У меня все больше сомнений в необходимости этого хака. Надо, наверное, выкинуть. |
|
Сейчас заметил, что эта особенность (включать в обработку дубликаты) имеет место и на Quick View, то-есть и общее количество файлов, и суммарный их размер включают в себя соответственно количество и размер дубликатов. |
|
> Эксперименты "до b4796" к конкретно этому случаю не относятся вообще никак. К разнице между dir и Alt-F7 не относятся. А к дубликатам в поиске как раз имеет отношение. Далеко не во все линки запрещён вход через ACL. Так что дубликаты в поиске будут. И проблема как раз в этом, и то что дубликаты будут и в выдаче dir /s проблему не отменяет. |
|
В те, которые в ОС присутствуют по умолчанию - запрещён. А если пользователь сам создаёт рекурсивные линки - это как раз то, что в первом комментарии. Как уже справедливо отмечено выше, идеального варианта нет и борьба с этим имеет побочные эффекты. |
|
Рекурсия не нужна. Любой линк в поддерево от текущей точки приводит к дублированию того, что ниже линка. Идеального варианта может и нет, но так: [list=null] |
|
изменения в 4796 небольшие. скрестить ежа с ужом вполне можно. сделал для теста почти автоматический мёрж и 1-2-3 схему - вполне работает. |
|
Линк в поддерево от грязи не заводится. Если пользователь его создал - значит на то была причина. Возможно, "настоящая" папка лежит глубоко и так просто удобнее. Возможно, слишком глубоко, глубже MAX_PATH, и это единственный способ нормально работать с файлами. Возможно, дерево громадно и часто используемые файлы удобнее вытащить наверх линком, чем ждать полчаса, пока просканируется всё. Возможно, что-то ещё. Если бы файлы по этому сокращенному пути перестали находиться при [x] Search in symbolic links - я бы, например, очень удивился и пошел писать багрепорт. На мой взгляд - чем меньше программа думает за пользователя, что ему лучше - тем лучше. |
|
> чем меньше программа думает за пользователя, что ему лучше - тем лучше. > Совершенно согласен. Но текущая реализация как раз решает за пользователя, что ему не надо удалять дубли. И я знаю пользователей которым это не нравится :) Опция (хотя бы через far:config) - это возможность пользователю делать выбор самостоятельно. |
|
> Но текущая реализация как раз решает за пользователя, что ему не надо удалять дубли. Весьма интересный подход. Можно сказать, что текущая реализация в том числе решает за пользователя, что он не хочет кофе, т. к. она его не заваривает. Пользователь уже решил, что хочет дубли, создав такой линк и поставив птичку "ходить по симлинкам", разве нет? |
|
Это может и не очень весомый аргумент, но Total Commander дублей не показывает, и в суммарный размер и количество файлов (там, где у нас Quick View) дубли у него не входят. На мой взгляд, если мы даём юзеру количество файлов и суммарный размер, то любой вариант, включающий дубли - это обман пользователя. Если реальных файлов, к примеру, 398, а мы говорим, что их 1007 - это обман. |
|
Shmuel, "дубли не показывает, потому что вообще по линкам не ходит" или "дубли не показывает, потому что их каким-то образом фильтрует"? |
|
> любой вариант, включающий дубли - это обман пользователя К хардлинкам это тоже относится? |
|
@DrKnS 1. Total не показывает, видимо потому, что фильтрует. Точно сказать не могу. (Я в плагине пошёл по самому простому пути - при встрече симлинка сразу перехожу на реальную директорию). 2. К хардлинкам это не относится. Если брать что-то за образец, то и Проводник, и Тотал их считают за отдельные файлы. |
|
> Пользователь уже решил, что хочет дубли, создав такой линк и поставив птичку "ходить по симлинкам", разве нет? Нет. Я пользователь, я создал линки потому что они мне были нужны, удобны - причина не важна. Когда я создавал линки, я ни разу не решал, что теперь хочу считать свои файлы в 5-ти экземплярах. Но при этом мне это навязывают. |
|
Тотал считает дубли, если линк проходимый, т.е. сейчас 'как фар'. Я бы сделал поиск и размер настраиваемыми с умолчанием - считать. |
|
Сейчас произвёл опыт с созданием своего (то есть к которому есть свободный доступ) junction, указывающего на подпапку "соседней" папки. После чего проверил показания (1) dir и (2) Проводника для родительской папки.
|
|
проводник считает линки на каталоги как файлы. |
|
> проводник считает линки на каталоги как файлы. Возможно (не проверял). Но он не считает дубликаты как файлы. |
|
точнее в хинте показывает их в files: ... (видно если мало элементов). а в общем количстве файлов в Properties вообще не учитывает. дубликатов да - нет ни в количестве файлов ни в общем размере. файловые хардлинки учитываются и в кол-ве файлов и в размере. файловые симлинки только в количестве файлов (даже если линк 'не внутрь'). add: кстати, файловые симлинки текущий фар точно также в размере не учитывает, а в кол-ве файлов и поиске считает. |
Date Modified | Username | Field | Change |
---|---|---|---|
2017-06-08 14:39 | shmuel | New Issue | |
2017-06-08 16:31 | shmuel | Steps to Reproduce Updated | |
2017-06-09 06:41 | 2useven10 | Note Added: 0015385 | |
2017-06-09 07:02 | shmuel | Note Added: 0015386 | |
2017-06-09 07:41 | shmuel | Note Added: 0015387 | |
2017-06-09 08:45 | 2useven10 | Note Added: 0015388 | |
2017-06-09 09:46 | shmuel | Note Added: 0015389 | |
2017-06-09 10:21 | 2useven10 | Note Added: 0015390 | |
2017-06-09 10:33 | shmuel | Note Added: 0015391 | |
2017-06-09 11:42 | 2useven10 | Note Added: 0015392 | |
2017-06-09 12:13 | DrKnS | Note Added: 0015393 | |
2017-06-09 12:18 | shmuel | Note Added: 0015394 | |
2017-06-09 12:30 | 2useven10 | Note Added: 0015395 | |
2017-06-09 13:21 | DrKnS | Note Added: 0015396 | |
2017-06-09 14:39 | 2useven10 | Note Added: 0015397 | |
2017-06-09 16:19 | 2useven10 | Note Edited: 0015395 | |
2017-06-09 16:33 | 2useven10 | Note Added: 0015398 | |
2017-06-09 16:34 | DrKnS | Note Added: 0015399 | |
2017-06-09 17:21 | 2useven10 | Note Added: 0015400 | |
2017-06-09 17:23 | 2useven10 | Note Edited: 0015400 | |
2017-06-09 18:13 | DrKnS | Note Added: 0015401 | |
2017-06-09 18:21 | shmuel | Note Added: 0015402 | |
2017-06-09 18:28 | DrKnS | Note Added: 0015403 | |
2017-06-09 18:30 | DrKnS | Note Added: 0015404 | |
2017-06-09 19:05 | shmuel | Note Added: 0015405 | |
2017-06-09 19:06 | shmuel | Note Edited: 0015405 | |
2017-06-09 19:16 | 2useven10 | Note Added: 0015406 | |
2017-06-14 18:06 | 2useven10 | Note Added: 0015424 | |
2017-06-14 19:12 | shmuel | Note Added: 0015425 | |
2017-06-14 19:16 | shmuel | Note Edited: 0015425 | |
2017-06-14 20:55 | 2useven10 | Note Added: 0015426 | |
2017-06-14 20:56 | 2useven10 | Note Edited: 0015426 | |
2017-06-14 20:59 | shmuel | Note Added: 0015427 | |
2017-06-14 21:03 | 2useven10 | Note Added: 0015428 | |
2017-06-14 21:05 | 2useven10 | Note Edited: 0015428 | |
2017-06-14 21:15 | 2useven10 | Note Edited: 0015428 | |
2017-06-14 21:15 | 2useven10 | Note Edited: 0015428 | |
2017-06-15 01:21 | 2useven10 | Note Edited: 0015428 |