LINUX.ORG.RU
ФорумAdmin

Find'ом выбрать НЕ все файлы


0

0

задача:
раз в неделю архивировать содержимое некоего каталога, однако в нём есть файлы (постоянно пополняются) которые ненужно архивировать (они оч большие, и ни кому не нужны - типа временные)
путь к ним примерно следующий (относительно архивируемого каталога):
*/DATAFLOW/(\d*)\..*
то-есть точное расположение этих файлов не известно, однако известно, что они находятся в каталоге DATAFLOW, и их имя (не считая расширения) состоит только из цифр.

команде find я не пока не знаю какое регулярное выражение передать в качестве значения аргумента -path, которое бы находило всё кроме DATAFLOW.

Идея такая:
find . -path 'ПОКА_НЕ_ЗНАЮ_ЧТО' -exec tar -cjf /opt/back_up/`date +F`.tar.bz2 {} \;

Ответ на: комментарий от oven

всё, нашёл решение: find . ! -ipath 'DATAFLOW/*' -exec .......

oven
() автор топика

>find . -path 'ПОКА_НЕ_ЗНАЮ_ЧТО' -exec tar -cjf /opt/back_up/`date +F`.tar.bz2 {} \;

так работать не будет, потому что в архиве Вы увидите только последний файл, надо по крайней мере указать опцию append у tar, это раз. с ключом j наверное тоже не сработает, жать нужно вконце процедуры, это два. на каждый файл форкать tar как-то расточительно. это три.

вообще в одну строчку можно так нарисовать:

find findoptions | cpio -o > /opt/back_up/`date +F`.cpio

а потом жать полученный cpio. а вот tar из stdin список файлов брать не умеет :(

borisych ★★★★★
()

а нужно обязательно одним find'ом обойтись? почему бы egrep не подключить?

find . -type f | egrep -v '.+/DATAFLOW/' | tar -cjf /opt/back_up/`date +F`.tar.bz2 -T -

> а вот tar из stdin список файлов брать не умеет :(

такие вот несознательные, ставящие трудящихся в затруднительное положение сведения мы будем с негодованием отвергать, товарищи! все на освоение man'ов!

berrywizard ★★★★★
()
Ответ на: комментарий от berrywizard

у tar нет мана, а есть инфо, а список оно только из файла умеет:

Even if NAMEs are often specified on the command line, they can also be read from a text file in the file system, using the `--files-from=FILE-OF-NAMES' (`-T FILE-OF-NAMES') option.

borisych ★★★★★
()
Ответ на: комментарий от borisych

$ man tar
TAR(1)                                               tar                                               TAR(1)

NAME
       tar - The GNU version of the tar archiving utility

SYNOPSIS
       tar <operation> [options]

       Operations:
       [-]A --catenate --concatenate
       [-]c --create
       [-]d --diff --compare
       [-]r --append
       [-]t --list
       [-]u --update
       [-]x --extract --get
       --delete

       Common Options:
       -C, --directory DIR
       -f, --file F
       -j, --bzip2
       -p, --preserve-permissions
       -v, --verbose
       -z, --gzip

       All Options:
       [  --atime-preserve ] [ -b, --blocking-factor N ] [ -B, --read-full-records ] [ --backup BACKUP-TYPE ]
       [ --block-compress ] [ -C, --directory DIR ] [ --check-links ] [ --checkpoint ] [  -f,  --file  [HOST-
       NAME:]F  ] [ -F, --info-script F --new-volume-script F ] [ --force-local   ] [ --format FORMAT ] [ -g,
       --listed-incremental F ] [ -G, --incremental ] [ --group GROUP ] [ -h, --dereference ] [  --help  ]  [
       -i,  --ignore-zeros ] [ --ignore-case ] [ --ignore-failed-read ] [ --index-file FILE ] [ -j, --bzip2 ]
       [ -k, --keep-old-files ] [ -K, --starting-file F ] [ --keep-newer-files ] [ -l, --one-file-system ]  [
       -L, --tape-length N ] [ -m, --touch, --modification-time ] [ -M, --multi-volume ] [ --mode PERMISSIONS
       ] [ -N, --after-date DATE, --newer DATE ] [ --newer-mtime DATE ] [ --no-anchored ] [  --no-ignore-case
       ]  [  --no-recursion  ]  [ --no-same-permissions ] [ --no-wildcards ] [ --no-wildcards-match-slash ] [
...............

borisych, ну вот чем бы препираться, взял бы да попробовал:

tar -cf tape.tar -T -
file1.txt
data2.dat
^D

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.