Копирование папок, содержащих найденные файлы
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Общие вопросы

#1: Копирование папок, содержащих найденные файлы Author: Mago PostPosted: Mon Mar 07, 2022 11:46
    —
Доброго времени суток. Не могу разобраться, я ищу файлы с определенным текстом, находит TXT, но мне нужно сохранить не сам файл тхт , а папку в которой он находится , а точнее папки так как файлов сотни . Как можно это сделать массово копировать все папки в которых найден искомый файл с текстом ?

#2:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Mar 08, 2022 21:13
    —
Ой, тут столько способов...
Например, после окончания поиска
1. Нажать "Feed to listbox";
2. Выделить что нужно или вообще всё командой cm_SelectAll;
3. Поместить выделение в буфер командой cm_CopyFullNamesToClip или родственной;
4. Ну и, собственно, уже в текстовом редакторе вставить из буфера.

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

#3:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 09, 2022 09:38
    —
Вахмурка
Вообще говоря, не так уж тут много годных способов, если внимательно вчитаться в запрос. А готового скрипта, позволяющего сделать это с минимальными усилиями в один проход, ИМХО, на данный момент пока нет. Если же использовать функционал TC, отчётливо видны три этапа операции.
Этап 1. Это легко. По содержимому файлов получить в результатах поиска список путей всех найденных файлов с этим содержимым. Далее выделить найденное и применить cm_CopyFullNamesToClip, всё правильно. (Можно сначала превратить найденное в набор колонок, где есть столбец с путём без имени файла типа [=tc.Путь], а потом скопировать по cm_CopyFileDetailsToClip и обработать в редакторе эту часть информации, суть та же.)
Этап 2 никакого отношения к TC не имеет. В неком внешнем текстовом редакторе предстоит вставить скопированное из буфера и превратить список путей с файлами в список папок без файлов (т.е. отсечь последние части путей). С какими трудозатратами это получится, зависит от возможностей редактора (в т.ч. поддержки регулярных выражений), объёма найденного и квалификации пользователя. Так или иначе на выходе должен появиться список папок с путями (если в одной папке есть несколько найденных файлов, то этот список будет короче исходного, пути-дубли надо убрать).
Этап 3. Снова возвращаемся в TC. Сохранённый файл-список проще всего указать параметром добавленной в TC 10 команды LOADLIST. После её вызова (кнопкой, клавишами и пр.) имеем в активной файловой панели как бы результаты поиска с содержимым этого списка, т.е. перечнем папок. Найденное выделяется и копируется обычным образом на другую файловую панель куда угодно.
Это, так сказать, базовая схема, имеющая при этом отношение к подфоруму "Общие вопросы". Всё прочее должно обсуждаться в "Автоматизации", но я там подходящих альтернатив не обнаружил.

Mago
Заголовок "копирование папок" не соответствует правилам форума, ибо не раскрывает суть запроса. Переименовано.

#4:  Author: sa PostPosted: Wed Mar 09, 2022 14:24
    —
Mago wrote:
копировать все папки в которых найден искомый файл

Если допускается копировать не только родительские папки, но и папки более высокого уровня, то можно воспользоваться плагином CopyTree.

Если нужны только родительские папки, то можно групповым переименованием (Ctrl+M) перенести файлы (в результатах поиска) с их родительскими папками во вспомогательные папки с уникальным именем (например, Абракадабра) с помощью маски для имени файла Абракадабра\[P]\[N], затем поиском найти эти папки и скопировать по F5 в требуемое место. Останется сделать откат переименований в инструменте группового переименования и удалить вспомогательные папки Абракадабра. Но при этом может измениться на текущую дата папок в исходных данных (для NTFS). Поэтому перед переименованием лучше воспользоваться или копией всех данных, или плагином CopyTree для промежуточного копирования найденных файлов (с папками) в отдельный каталог.

P.S.
Похоже, что решал не ту задачку, что все остальные: полагал, что в папках надо копировать не всё содержимое, а только найденные "файлы с определённым текстом".

Для правильной задачи, как вариант, список родительских папок с путями можно также получить в ИГП - инструменте группового переименования (без выполнения реального переименования!).
Примерно так:
1) Выделить в панели с результатами поиска найденные файлы
2) Запустить ИГП (Ctrl+M)
3) Поле Маска для: имени файла [=tc.Путь]
4)                           …расширения очистить
5) Найти: .
6) Заменить на: :
7) 1x включить
8) Кнопка внешнего редактора (F10), в контекстном меню выбрать "Редактировать имена..."
9) В редакторе сохранить список папок
10) Выйти из редактора, отказаться от загрузки изменённых имён
11) Выйти из ИГП
Пункты 2-7 можно заменить вызовом команды multirename имя_шаблона с сохранёнными в указанном шаблоне настройками ИГП.



Total Commander -> Общие вопросы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group