none
Очистка от нежелательных файлов и папок RRS feed

  • Вопрос

  • Структура каталога \\share\FTP\

    Папка-1 (этот каталог удалять не надо)
    Папка-2 (этот каталог удалять не надо)
    Папка-3 (этот каталог удалять не надо)
    Новая папка (этот каталог надо улять )
    новый файл (этот файл надо удалять)

    В каждой папке есть папки:

    Папка-1 (этот каталог удалять не надо и его файлы)
    Папка-2 (этот каталог удалять не надо и его файлы)
    Папка-3 (этот каталог удалять не надо и его файлы)
    Новая папка (этот каталог надо улять )
    новый файл (этот файл надо удалять)

    Поделитесь может у кого есть такой скрипт ,а надо :

    Нужно чтобы скрипт в конце рабочего дня проверял каталог на целосность и удалял ненужное , например в рутовом каталоге создали Новую папку или файл или в под каталого папок которые я выше описал ,нужно чтобы скрипт удалял все ненужные файлы за пределами каталогов и каталоги которые создали пользовали,а каталоги и его файлы которые прописанны в скрипте не трогал и пользователи могли там все создавать.


    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.


    • Изменено MR.Minion 27 мая 2012 г. 12:12

Ответы

  • Не совсем :) Лучше использовать

    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3', 'Документы', 'Мерчендайзинг', 'Музыка', 'Фото отчёты'

    без всяких "вторых уровней"
    И при выполнении

    Get-ChildItem $Path -Recurse -Exclude $Exclude

    в вывод попадёт всё, кроме того, что находится в переменной $Exclude независимо от расположения и глубины вложенности.

    И, кстати, у командлета Remove-Item как и любого другого, которые создают, изменяют, удаляют (в общем что-то меняют в системе) есть параметр -WhatIf, с помощью которого можно увидеть, что произойдёт при выполнении данной операции без самого выполнения и без риска что-то сломать.
    • Помечено в качестве ответа MR.Minion 28 мая 2012 г. 5:27
  • Предлагаю вот так:

    $Path = '\\Share\FTP\'
    
    # Исключения
    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3'
    
    # Удаляем всё, кроме исключений
    Get-ChildItem $Path -Recurse -Exclude $Exclude | Remove-Item -Verbose


    • Изменено Smearg 27 мая 2012 г. 13:18
    • Помечено в качестве ответа MR.Minion 27 мая 2012 г. 13:31
  • В папке 'D:\FTP\for_SHOPS' есть папки и файлы:

    'Папка-1'
    'Папка-2'
    'Папка-3'
    'Папка-4'
    'Папка-5'
    бублик.exe
    log.txt

    Скрипт

    $Exclude1 = 'Папка-1', 'Папка-2', 'Папка-3'
    Get-ChildItem $Path -Exclude $Exclude1 | Remove-Item -Verbose 

    удалит

    'Папка-4'
    'Папка-5'
    бублик.exe
    log.txt

    Содержимое папок 'Папка-1', 'Папка-2', 'Папка-3' не изменится.



    • Изменено Deft_ 28 мая 2012 г. 5:08
    • Помечено в качестве ответа MR.Minion 28 мая 2012 г. 5:27

Все ответы

  • Предлагаю вот так:

    $Path = '\\Share\FTP\'
    
    # Исключения
    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3'
    
    # Удаляем всё, кроме исключений
    Get-ChildItem $Path -Recurse -Exclude $Exclude | Remove-Item -Verbose


    • Изменено Smearg 27 мая 2012 г. 13:18
    • Помечено в качестве ответа MR.Minion 27 мая 2012 г. 13:31
  • Предлагаю вот так:

    $Path = '\\Share\FTP\'
    
    # Исключения
    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3'
    
    # Удаляем всё, кроме исключений
    Get-ChildItem $Path -Recurse -Exclude $Exclude | Remove-Item -Verbose


    А как сделать проверку структуры подпапок 'Папка-1', 'Папка-2', 'Папка-3' так тоже надо удалять не нужный хлам который пользователь может создать.


    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.


    • Изменено MR.Minion 27 мая 2012 г. 13:33
  • Как вариант перечислить всё, что НЕ нужно удалять в переменной $Exclude из всех подпапок 1, 2, ...
    Параметр -recurse указывает командлету Get-ChildItem обходить все подпапки в заданной; для исключения ненужных элементов (чтобы в нашем случае не удалить то, что не нужно) используется параметр -Exclude, т.е. под удаление попадёт всё из каталога $Path и всех его подкаталогов, что не указано в $Exclude.

    Наверное, практичнее будет сделать какой-нибудь файл, в котором будут имена исключаемых файлов и каталогов, и перед удалением читать этот файл:

    Get-ChildItem $Path -Recurse -Exclude (get-Content '.\exclude.txt') | Remove-Item


    • Изменено Smearg 27 мая 2012 г. 14:32
  • Как вариант перечислить всё, что НЕ нужно удалять в переменной $Exclude из всех подпапок 1, 2, ...
    Параметр -recurse указывает командлету Get-ChildItem обходить все подпапки в заданной; для исключения ненужных элементов (чтобы в нашем случае не удалить то, что не нужно) используется параметр -Exclude, т.е. под удаление попадёт всё из каталога $Path и всех его подкаталогов, что не указано в $Exclude.

    Наверное, практичнее будет сделать какой-нибудь файл, в котором будут имена исключаемых файлов и каталогов, и перед удалением читать этот файл:

    Get-ChildItem $Path -Recurse -Exclude (get-Content '.\exclude.txt') | Remove-Item


    А как это выполнить на сервере 2003 где нет PS ?

    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.


    • Изменено MR.Minion 27 мая 2012 г. 14:53
  • Лучше всего скачать и поставить на сервер Powershell, даже если сейчас не нужен в будущем всё равно пригодится :)
  • $Path = 'D:\FTP\for_SHOPS'

    # Исключения 1-го уровня
    $Exclude1 = 'Папка-1', 'Папка-2', 'Папка-3'

    # Исключения 2-го уровня
    $Exclude2 = 'Документы', 'Мерчендайзинг', 'Музыка', 'Фото отчёты'

    # Удаляем всё, кроме исключений
    Get-ChildItem $Path -Recurse -Exclude $Exclude1,$Exclude2 | Remove-Item -Verbose

    Правильно я написал исключение 2-го уровня в запрос ?

    Павильно я понял что те папки которые я описал , они не будут удалялтся и файлы которые в этих каталогах созданые пользователем тоже останутся на месте ,будут удалятся все файлы и каталоги которые я не описал , правильно?


    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.

  • Не совсем :) Лучше использовать

    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3', 'Документы', 'Мерчендайзинг', 'Музыка', 'Фото отчёты'

    без всяких "вторых уровней"
    И при выполнении

    Get-ChildItem $Path -Recurse -Exclude $Exclude

    в вывод попадёт всё, кроме того, что находится в переменной $Exclude независимо от расположения и глубины вложенности.

    И, кстати, у командлета Remove-Item как и любого другого, которые создают, изменяют, удаляют (в общем что-то меняют в системе) есть параметр -WhatIf, с помощью которого можно увидеть, что произойдёт при выполнении данной операции без самого выполнения и без риска что-то сломать.
    • Помечено в качестве ответа MR.Minion 28 мая 2012 г. 5:27
  • Не совсем :) Лучше использовать

    $Exclude = 'Папка-1', 'Папка-2', 'Папка-3', 'Документы', 'Мерчендайзинг', 'Музыка', 'Фото отчёты'

    без всяких "вторых уровней"
    И при выполнении

    Get-ChildItem $Path -Recurse -Exclude $Exclude

    в вывод попадёт всё, кроме того, что находится в переменной $Exclude независимо от расположения и глубины вложенности.

    И, кстати, у командлета Remove-Item как и любого другого, которые создают, изменяют, удаляют (в общем что-то меняют в системе) есть параметр -WhatIf, с помощью которого можно увидеть, что произойдёт при выполнении данной операции без самого выполнения и без риска что-то сломать.

    А как сделать чтобы в этих папках не удалялись файлы ,а удалялись файлы которые созданы пользователями за пределеами папок ?

    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.

  • Добрый день.

    Предложенный Вам вариант

    Get-ChildItem $Path -Recurse -Exclude $Exclude | Remove-Item -Verbose

    удалит все папки и файлы, которые не указаны в $Exclude, вне зависимости от глубины их расположения.

    Если нужно удалить файлы в папке без анализа внутри подпапок, то нужно убрать -Recurse.

    Если просто надо из какой-то папки удалить все файлы, то можно сделать удаление по типу "файл" или по размеру.

    О командлете Get-ChildItem можно почитать тут:

    technet.microsoft.com/ru-ru/library/dd347686.aspx

    примеры тут:

    http://blog.wadmin.ru/2011/09/powershell-lessons-working-with-files-and-folders/



    • Изменено Deft_ 28 мая 2012 г. 4:09
  • Добрый день.

    Предложенный Вам вариант

    Get-ChildItem $Path -Recurse -Exclude $Exclude | Remove-Item -Verbose

    удалит все папки и файлы, которые не указаны в $Exclude, вне зависимости от глубины их расположения.

    Если нужно удалить файлы в папке без анализа внутри подпапок, то нужно убрать -Recurse.

    Если просто надо из какой-то папки удалить все файлы, то можно сделать удаление по типу "файл" или по размеру.

    О командлете Get-ChildItem можно почитать тут:

    technet.microsoft.com/ru-ru/library/dd347686.aspx

    примеры тут:

    http://blog.wadmin.ru/2011/09/powershell-lessons-working-with-files-and-folders/



    $Path = 'D:\FTP\for_SHOPS'

    # Исключения 1-го уровня
    $Exclude1 = 'Папка-1', 'Папка-2', 'Папка-3'

    # Удаляем всё, кроме исключений

    Get-ChildItem $Path -Exclude $Exclude1 | Remove-Item -Verbose

    Правильно я понял если я сделаю как Выше написал у меня все удалится за исключением папок которые описал и их файлы ?


    Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.

  • В папке 'D:\FTP\for_SHOPS' есть папки и файлы:

    'Папка-1'
    'Папка-2'
    'Папка-3'
    'Папка-4'
    'Папка-5'
    бублик.exe
    log.txt

    Скрипт

    $Exclude1 = 'Папка-1', 'Папка-2', 'Папка-3'
    Get-ChildItem $Path -Exclude $Exclude1 | Remove-Item -Verbose 

    удалит

    'Папка-4'
    'Папка-5'
    бублик.exe
    log.txt

    Содержимое папок 'Папка-1', 'Папка-2', 'Папка-3' не изменится.



    • Изменено Deft_ 28 мая 2012 г. 5:08
    • Помечено в качестве ответа MR.Minion 28 мая 2012 г. 5:27