Удаление в 50 каталогах лишних папок, с сохранением файлов
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
-
Darkenlightener
- Сообщения: 19
- Зарегистрирован: Сб янв 14, 2012 12:58
Поиск папок, содержащих только 1 непустую папку
Здравствуйте!
Обращаюсь к корифеям с довольно нетривиальным вопросом (во всяком случае, поиск по форуму мне не помог).
Я привожу в порядок свою электронную библиотеку, в ней много папок, полученных путем распаковки скачанных архивов. Часто получается так, что в папке находится 1 вложенная папка, а уже в ней лежат файлы и/или папки. Мне приходится вручную копировать файлы и/или папки из вложенной папки в основную, а вложенную (опустевшую) папку удалять. Вопрос: как сделать так, чтобы поиск находил все папки, в которых есть 1 вложенная папка (непустая), но нет файлов на том же уровне вложенности, что и эта папка? Скриншоты приложить не удалось из-за того, что я новичок, поэтому опишу их словами
:
Папки, содержимое которых меня устраивает — несколько непустых папок или непустые папки + файлы на конкретном уровне вложенности.
Папки, содержимое которых меня не устраивает — только 1 вложенная непустая папка на конкретном уровне вложенности (в ней могут быть папки с файлвми или просто файлы, это непринципиально).
Я пробовал делать это с помощью плагина DirSizeCalc, но не удалось. Подозреваю, что проблему можно решить, если при поиске задать значение одинаковости уровня вложенности для наличия папки и отсутствия файлов, т.е. Ditectory Count = 1 + File Count = 0 + один и тот же уровень вложенности. Однако, насколько я понимаю, сейчас в Тотале при поиске можно задать только уровень вложенности, а это не подходит, поскольку меня интересует не глубина поиска, а уровни, на которых есть непустая папка и нет файлов.
Если кто-нибудь сможет помочь, буду очень благодарен, поскольку проблема для меня довольно насущная.
[mod="Avada"]Всё последующее объединено с текущей темой с учётом близости поставленных задач.[/mod]
Обращаюсь к корифеям с довольно нетривиальным вопросом (во всяком случае, поиск по форуму мне не помог).
Я привожу в порядок свою электронную библиотеку, в ней много папок, полученных путем распаковки скачанных архивов. Часто получается так, что в папке находится 1 вложенная папка, а уже в ней лежат файлы и/или папки. Мне приходится вручную копировать файлы и/или папки из вложенной папки в основную, а вложенную (опустевшую) папку удалять. Вопрос: как сделать так, чтобы поиск находил все папки, в которых есть 1 вложенная папка (непустая), но нет файлов на том же уровне вложенности, что и эта папка? Скриншоты приложить не удалось из-за того, что я новичок, поэтому опишу их словами
Папки, содержимое которых меня устраивает — несколько непустых папок или непустые папки + файлы на конкретном уровне вложенности.
Папки, содержимое которых меня не устраивает — только 1 вложенная непустая папка на конкретном уровне вложенности (в ней могут быть папки с файлвми или просто файлы, это непринципиально).
Я пробовал делать это с помощью плагина DirSizeCalc, но не удалось. Подозреваю, что проблему можно решить, если при поиске задать значение одинаковости уровня вложенности для наличия папки и отсутствия файлов, т.е. Ditectory Count = 1 + File Count = 0 + один и тот же уровень вложенности. Однако, насколько я понимаю, сейчас в Тотале при поиске можно задать только уровень вложенности, а это не подходит, поскольку меня интересует не глубина поиска, а уровни, на которых есть непустая папка и нет файлов.
Если кто-нибудь сможет помочь, буду очень благодарен, поскольку проблема для меня довольно насущная.
[mod="Avada"]Всё последующее объединено с текущей темой с учётом близости поставленных задач.[/mod]
Последний раз редактировалось Darkenlightener Сб янв 14, 2012 14:24, всего редактировалось 1 раз.
Darkenlightener
В рамках функциональности известных мне плагинов задача, ИМХО, не решается. Слишком много граничных условий, между которыми не удаётся выстроить нужную взаимосвязь.
И вообще это тема не для "Общих вопросов". Переношу в "Автоматизацию".
В рамках функциональности известных мне плагинов задача, ИМХО, не решается. Слишком много граничных условий, между которыми не удаётся выстроить нужную взаимосвязь.
Именно так.Flasher писал(а):Хотя это не поможет, проще один из имеющихся скриптов перемещения на уровень вверх подлатать.
И вообще это тема не для "Общих вопросов". Переношу в "Автоматизацию".
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
-
Darkenlightener
- Сообщения: 19
- Зарегистрирован: Сб янв 14, 2012 12:58
Flasher
Вот именно, глубина вложенности меня здесь вообще не интересует.
Avada
Мне надо, чтобы поиск осуществлялся в пределах каждого уровня и они между собой не смешивались при поиске, т.е. проверяется первый уровень на Ditectory Count = 1 + File Count = 0, потом второй (первый при этом не трогаем), третий (первый и второй пропускаем), как-то так. Вот, в принципе, и вся взаимосвязь, по-моему, не так уж много условий
В скриптах я, к сожалению, не Копенгаген
Вот именно, глубина вложенности меня здесь вообще не интересует.
Avada
Мне надо, чтобы поиск осуществлялся в пределах каждого уровня и они между собой не смешивались при поиске, т.е. проверяется первый уровень на Ditectory Count = 1 + File Count = 0, потом второй (первый при этом не трогаем), третий (первый и второй пропускаем), как-то так. Вот, в принципе, и вся взаимосвязь, по-моему, не так уж много условий
В скриптах я, к сожалению, не Копенгаген
А какой смысл в рекурсивном нахождении папок, если требуется перемещать наверх содержимое одиноких подкаталогов первого уровня? Это же каша получится, а не полноценные распакованные "образы". Или есть уверенность, что в структуре имеющихся папок с рядом лежащими файлами нет одиноких подкаталогов без близлежащих файлов?Darkenlightener писал(а):чтобы поиск осуществлялся в пределах каждого уровня и они между собой не смешивались при поиске
-
Darkenlightener
- Сообщения: 19
- Зарегистрирован: Сб янв 14, 2012 12:58
Flasher
Честно говоря, идею вообще не уловил(( Рекурсию я себе слабо представляю))
Если говорить о том, что мне нужно в идеале, то надо, чтобы в каждой папке на любом уровне были или непустые папки + файлы или только файлы. Как это по-научному будет, не знаю, к сожалению. "Нутром чувствую, что литр, а как математически выразить — не знаю!" (с)
В идеале хотелось бы добиваться этого автоматически, но если это слишком сложно, то хотя бы находить папки только с 1 вложенной папкой на каждом уровне, чтобы потом вручную их обрабатывать.
Если непонятно, откуда у меня берутся такие папки, объясняю, что они получаются при массовой распаковке rar и zip архивов по принципу "извлечь каждый архив в отдельную папку". Если в архив упакована одна папка, то на выходе получается папка\папка\файлы вместо нужного мне папка\файлы
Честно говоря, идею вообще не уловил(( Рекурсию я себе слабо представляю))
Если говорить о том, что мне нужно в идеале, то надо, чтобы в каждой папке на любом уровне были или непустые папки + файлы или только файлы. Как это по-научному будет, не знаю, к сожалению. "Нутром чувствую, что литр, а как математически выразить — не знаю!" (с)
В идеале хотелось бы добиваться этого автоматически, но если это слишком сложно, то хотя бы находить папки только с 1 вложенной папкой на каждом уровне, чтобы потом вручную их обрабатывать.
Если непонятно, откуда у меня берутся такие папки, объясняю, что они получаются при массовой распаковке rar и zip архивов по принципу "извлечь каждый архив в отдельную папку". Если в архив упакована одна папка, то на выходе получается папка\папка\файлы вместо нужного мне папка\файлы
Darkenlightener
Никакой новой информации. Я вообще-то вопросы задал, а не идеей поделился.
Рекурсивный поиск - это поиск без ограничений глубины.
Я пишу о том, что в любой такой папке, воссозданной из распакованного архива могут находиться на последующих глубинах одиночные папки без файлов рядом. А дальше отвечаем на мой вопрос.
Автоматизировать можно только исходя из ответа на него.
Никакой новой информации. Я вообще-то вопросы задал, а не идеей поделился.
Рекурсивный поиск - это поиск без ограничений глубины.
Я пишу о том, что в любой такой папке, воссозданной из распакованного архива могут находиться на последующих глубинах одиночные папки без файлов рядом. А дальше отвечаем на мой вопрос.
Автоматизировать можно только исходя из ответа на него.
-
Darkenlightener
- Сообщения: 19
- Зарегистрирован: Сб янв 14, 2012 12:58
Я просто вопрос не понял, потому так ответилFlasher писал(а):Никакой новой информации. Я вообще-то вопросы задал, а не идеей поделился.
Их тоже надо найти. Надо найти все такие папки на всех уровнях и стянуть наверх до вида папка\папка+папка+(...)+папка+файлы или папка\папка+папка+(...)+папка. Или, хотя бы, просто найти. Все вложенные папки должны выглядеть так же. Это ответ на вопрос?Flasher писал(а): Я пишу о том, что в любой такой папке, воссозданной из распакованного архива могут находиться на последующих глубинах одиночные папки без файлов рядом.
-
Darkenlightener
- Сообщения: 19
- Зарегистрирован: Сб янв 14, 2012 12:58
А это ни о чём не говорит?:Darkenlightener писал(а):я не предполагал, что еще и перемещать можно автоматически
Я вижу пока следующие пути решения вопроса:Flasher писал(а):проще один из имеющихся скриптов перемещения на уровень вверх подлатать
1) Поскольку при распаковке имя директории соответвует базовому имени архива, можно сравнивать её имя с именем находящейся внутри неё директории, допустим, по каким-то первым символам, и если они совпадают, то содержимое должно перемещаться наверх. Тут же можно проверять наличии файлов с определённым расширением.
2) Распаковать все архивы заново с присвоением одинакового комментария папкам. По тому комментарию отслеживать папки с вышеописанными условиями и перемещать.
3) Организовать поиск через Script Content Plugin, самостоятельно проверить найденные по заданному изначально критерию папки, потом воспользоваться скриптом автоперемещения.
4) Воспользоваться обычным поиском папок с заданной глубиной расположения этих распакованных директорий. Задача скрипта будет выделить нужные папки для самостоятельной проверки на пригодность для последующего перемещения наверх.
Что лучше?
Последний раз редактировалось Flasher Сб янв 14, 2012 17:40, всего редактировалось 1 раз.
Код: Выделить всё
@echo off &chcp 1251 >nul &setlocal enableextensions
rem Список папок "только 1 папка и 0 файлов на первом уровне вложенности"
set "list=_1.lst"
>"%list%" echo.
for /d /r %%d in (*) do (
dir "%%d" |find "0 файлов 0 байт" >nul &&for /f %%c in (
'dir "%%d" ^|find /c "<DIR>"'
) do if "%%c"=="3" >>"%list%" echo %%d
)
Последний раз редактировалось Tol!k Сб янв 14, 2012 17:35, всего редактировалось 1 раз.