LINUX.ORG.RU

Рекурсивное копирование с игнорированием определённых типов файлов.

 , , , ,


4

2

Нужно рекурсивно скопировать все файлы из одного каталога в другой, в том числе начинающиеся на точку. Но нужно что бы при копировании были проигнорированы все файлы *.*~ (временные). Можно ли это сделать командой cp ?

Только cp — нет. Можно: (как уже сказали) cp + find, cp + bash (кл. слова GLOBIGNORE, dotglob, globstar), rsync.

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

cp -нет

Хе-хе.

// q.c
// gcc q.c -fPIC -shared -o libq.so -ldl
#define _GNU_SOURCE
#include <sys/types.h>
#include <unistd.h>
#include <dlfcn.h>
#include <errno.h>
#include <string.h>

extern int errno;

struct stat;
static int (*orig_lxstat)(int ver, const char *path, struct stat *buf);

__attribute__((constructor))
static
void
init(void)
{
    orig_lxstat = dlsym(RTLD_NEXT, "__lxstat");
}

int
__lxstat(int ver, const char *path, struct stat *buf)
{
    int len = strlen(path);
    if (path[len-1] == '~') {
        errno = EACCES;
        return -1;
    }

    return orig_lxstat(ver, path, buf);
}
$ LD_PRELOAD=./libq.so cp -a from to
i-rinat ★★★★★
()
Ответ на: комментарий от Zmicier

Логически разницы нет, если, конечно, в месте назначения не лежит куча важных файлов такого вида (например, замаскированной парнухи).

ziemin ★★
()
Ответ на: комментарий от i-rinat

Так вот как можно перехватывать функции... Не то, что бы я иска, но за пример спасибо.

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

Это всё меняет!!11

cp делает обход директорий и копирование, а бинарник ему помогает выбрать файлы, которые стоит пропустить.

Меня коробит, когда пишут «на баше», на деле пачками вызывая sed'ы, awk'и, grep'ы и иже с ними. Но я же держусь.

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

Меня коробит, когда пишут «на баше», на деле пачками вызывая sed'ы, awk'и, grep'ы и иже с ними.

Ну да, раз несколько вызвать компилятор Си для одноразовой задачи - это наше всё и сохраняет озоновый слой.

tailgunner ★★★★★
()
Ответ на: комментарий от i-rinat

Зашел в ветку про несуществующие ключики к cp — а тут пример библиотеки для прелоада. ЛОР торт.

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

раз несколько вызвать компилятор Си для одноразовой задачи - это наше всё и сохраняет озоновый слой.

Выяснить, что вместо lstat работу делает __lxstat — это наше всё. Когда бы я это ещё узнал?

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

вместо lstat работу делает __lxstat — это наше всё. Когда бы я это ещё узнал?

Теперь нам придется... ээ, не беспокойся... так зачем тебе было это знать и стоило ли оно того?

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

решение нормальное

Нормальное, да. Только не для этой задачи.

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

решение нормальное

Это решение нельзя использовать в реальных задачах. Оно годится только для выпендривания на форуме. (Собственно, я его и использовал по назначению.)

i-rinat ★★★★★
()
Ответ на: комментарий от tailgunner

так зачем тебе было это знать и стоило ли оно того?

Я надеялся, что оно приблизит меня к пониманию того, почему сегфолтится pthread_kill(p, 0) и чем его заменить.

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