Исключить из поиска find внутренний каталог

Тема в разделе "Другие языки", создана пользователем virtualbrest, 20 сен 2011.

Модераторы: Цукер
  1. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Архивирую файлы сайта такой командой для сервера:

    find . -type f -print0 | xargs -0 tar rvf "$archive.tar" > /dev/null
    gzip $archive.tar

    Как правильно исключить их этого поиска некий каталог и все его содержимое внутри папки. К примеру, надо исключить этот каталог:

    userfiles/image/_photo/2010/

    Что бы он не архивировался, там старые фото, и архив получается большим.
     
  2. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    Нужно использовать опцию -prune
    Код:
    find . -path ./2010 -prune -or -type f -print0 
    Пропускаем папку 2010, находящийся в текущей папке.
     
  3. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Что то я пробовал, не получается, вот так?

    Код:
    find . -path ./userfiles/image/_photo/2010 -prume -type f -print0 | xargs -0 tar rvf "$archive.tar" > /dev/null
    может не туда просто вставляю...
     
  4. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    забыл -or. Это логический или.
    Как только путь в процессе поиска становится равным ./userfiles/image/_photo/2010 он пропускается или выполняется действия с правой стороны от -or
    Вот так должно быть
    Код:
    find . -path ./userfiles/image/_photo/2010 -prune -or -type f -print0 | xargs -0 tar rvf "$archive.tar" > /dev/null
    
     
    virtualbrest нравится это.
  5. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Не катит, отвечает

    find: invalid predicate `-prume'

    и вот ни в какую...
     
  6. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    Блин,я ошибся. Правильный параметр -prune. Буква n!
    Скопировал с консоли. В последнем find исключается папка ./userfiles/image/2010
    Код:
    $ mkdir -p ./{trololo,userfiles}/{image,image2}/{2010,2011}/
    $ touch ./{trololo,userfiles}/{image,image2}/{2010,2011}/01.jpg
    $ find . -type f
    ./trololo/image/2010/01.jpg
    ./trololo/image/2011/01.jpg
    ./trololo/image2/2010/01.jpg
    ./trololo/image2/2011/01.jpg
    ./userfiles/image/2010/01.jpg
    ./userfiles/image/2011/01.jpg
    ./userfiles/image2/2010/01.jpg
    ./userfiles/image2/2011/01.jpg
    $ find . -path ./userfiles/image/2010 -prune -or -type f -print
    ./trololo/image/2010/01.jpg
    ./trololo/image/2011/01.jpg
    ./trololo/image2/2010/01.jpg
    ./trololo/image2/2011/01.jpg
    ./userfiles/image/2011/01.jpg
    ./userfiles/image2/2010/01.jpg
    ./userfiles/image2/2011/01.jpg
    
     
    virtualbrest нравится это.
  7. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Ага.. точно. Ну, судя по всему заработало, упаковало все как надо, спасибо!