The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Удаление с исключением., !*! fire002, 09-Май-11, 16:17  [смотреть все]
Собсно, есть директория:
/home/1/
в ней ряд файлов и других директорий.
home/1/2/
home/1/3/
В каждой из директорий, опять-же есть файлы и папки.
так-же, в директории /home/1/2/ есть папка 6 c файлами.
Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в ней.
Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем.
  • Удаление с исключением., !*! Валенок, 16:53 , 09-Май-11 (1)
    > Собсно, есть директория:
    > /home/1/
    > в ней ряд файлов и других директорий.
    > home/1/2/
    > home/1/3/
    > В каждой из директорий, опять-же есть файлы и папки.
    > так-же, в директории /home/1/2/ есть папка 6 c файлами.
    > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в
    > ней.
    > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем.

    mc


  • Удаление с исключением., !*! sdog, 22:29 , 09-Май-11 (2)
  • Удаление с исключением., !*! Вова, 06:49 , 10-Май-11 (9)
    > Собсно, есть директория:
    > /home/1/
    > в ней ряд файлов и других директорий.
    > home/1/2/
    > home/1/3/
    > В каждой из директорий, опять-же есть файлы и папки.
    > так-же, в директории /home/1/2/ есть папка 6 c файлами.
    > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в
    > ней.
    > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем.

    inum=`ls -i /home/1/2/6| sed 's/ .*//'` find  /home/1 ! -inum $inum -delete

  • Удаление с исключением., !*! Andrey Mitrofanov, 12:03 , 10-Май-11 (10) +1
    > так-же, в директории /home/1/2/ есть папка 6 c файлами.
    > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в
    > ней.
    > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем.

    $ cat ./x.sh
    #!/bin/bash

    mkdir tst || exit
    cd tst

    mkdir -p 1/{1,2,3}/{5,6,7}
    touch 1/{1,2,3}/{5,6,7}/file

    echo "BEFORE:"
    find 1/ -depth

    echo "TEST:"
    find 1/ -depth -path 1/2/6/* -prune -o -delete

    echo "AFTER:"
    find 1/ -depth
    $ ./x.sh
    BEFORE:
    1/1/5/file
    1/1/5
    1/1/6/file
    1/1/6
    1/1/7/file
    1/1/7
    1/1
    1/2/5/file
    1/2/5
    1/2/6/file
    1/2/6
    1/2/7/file
    1/2/7
    1/2
    1/3/5/file
    1/3/5
    1/3/6/file
    1/3/6
    1/3/7/file
    1/3/7
    1/3
    1/
    TEST:
    find: cannot delete `1/2/6': Каталог не пуст
    find: cannot delete `1/2': Каталог не пуст
    find: cannot delete `1/': Каталог не пуст
    AFTER:
    1/2/6/file
    1/2/6
    1/2
    1/
    $ _

    • Удаление с исключением., !*! Вова, 13:22 , 10-Май-11 (11)
      >[оверквотинг удален]
      > TEST:
      > find: cannot delete `1/2/6': Каталог не пуст
      > find: cannot delete `1/2': Каталог не пуст
      > find: cannot delete `1/': Каталог не пуст
      > AFTER:
      > 1/2/6/file
      > 1/2/6
      > 1/2
      > 1/
      > $ _

      Это верный вариант, так и надо делать, через файнд, у утилиты довольно сильная логика условий. Я как-то пропустил в постановке задачи "и файлы в директории", тоже бы это написал, варианты выше  - как ересь.

    • Удаление с исключением., !*! ACCA, 13:59 , 10-Май-11 (12)
      > touch 1/{1,2,3}/{5,6,7}/file

      добавь

      touch 1/2/6_junk_file_{1..100}
      touch 1/2_junk_file_{1..100}

      Предположим, что их тоже нужно удалять.

      • Удаление с исключением., !*! Andrey Mitrofanov, 14:24 , 10-Май-11 (13)
        > добавь

        Добавил.

        > touch 1/2/6_junk_file_{1..100}
        > touch 1/2_junk_file_{1..100}

        Без {...} - для теста достаточно одной таблэтки.

        > Предположим, что их тоже нужно удалять.

        Удалились. Без изменения основной строки.

        ...
        Для полноты :)) тест-кейса сделал -

        mkdir -p 1/{1,2,3}/{5,6,7}
        touch 1{,/{1,2,3}{,/{5,6,7}}}/file

        Получил "тот же" результат -

        TEST:
        find: cannot delete `1/2/6': Каталог не пуст
        find: cannot delete `1/2': Каталог не пуст
        find: cannot delete `1/': Каталог не пуст
        AFTER:
        1/2/6/file
        1/2/6
        1/2
        1/

  • Удаление с исключением., !*! XoRe, 14:56 , 10-Май-11 (14)
    > Собсно, есть директория:
    > /home/1/
    > в ней ряд файлов и других директорий.
    > home/1/2/
    > home/1/3/
    > В каждой из директорий, опять-же есть файлы и папки.
    > так-же, в директории /home/1/2/ есть папка 6 c файлами.
    > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в
    > ней.
    > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем.

    rm -rf /home/[^1]*
    rm -rf /home/1/[^2]*
    rm -rf /home/1/2/[^6]*

    или

    find ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} \;




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру