LINUX.ORG.RU

вопрос по копированию файлов

 


0

1

Добрый день! имеется такая структура директорий /keyspace1/table2/snapshots/snp/тутмногофайлов теперь надо сделать так что бы скрипт копировал файлы вот так /keyspace1/table2/тутмногофайлов т.е надо что бы скрипт из директории snp копировал файлы в директорию table2 и удалял snapshots и snp


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

сорри неправильно поставил вопрос) дело в том что у меня очень много директорий и имена /keyspace1/table2 произвольные можно ли сделать это в цикле?

Tabbik
() автор топика
Ответ на: комментарий от Tabbik

можно все.
главное: четко описать «чаго хочэшь» в технически грамотных терминах - из четкого тз достаточно просто сделать конечный скрипт.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)

Ну если файлов вот прямо много, то можно так (это одна команда, копировать в консоль целиком):

find -type d -name snp -execdir sh -c '
    cd "$1";
    find -mindepth 1 -maxdepth 1 -exec mv -t ../.. \{\} +;
    cd ../..;
    rmdir snapshots/snp snapshots
' -- {} \; -prune

Проверка:

# mkdir -p keyspace{1,2,3}/table{1,2,3}/snapshots/snp/dir; touch keyspace{1,2,3}/table{1,2,3}/snapshots/snp/{,dir/}file;
# tree
.
├── keyspace1
│   ├── table1
│   │   └── snapshots
│   │       └── snp
│   │           ├── dir
│   │           │   └── file
│   │           └── file
│   ├── table2
│   │   └── snapshots
│   │       └── snp
│   │           ├── dir
│   │           │   └── file
│   │           └── file
│   └── table3
│       └── snapshots
│           └── snp
│               ├── dir
│               │   └── file
│               └── file
├── keyspace2
│   ├── table1
│   │   └── snapshots
│   │       └── snp
│   │           ├── dir
│   │           │   └── file
│   │           └── file
│   ├── table2
│   │   └── snapshots
│   │       └── snp
│   │           ├── dir
│   │           │   └── file
│   │           └── file
│   └── table3
│       └── snapshots
│           └── snp
│               ├── dir
│               │   └── file
│               └── file
└── keyspace3
    ├── table1
    │   └── snapshots
    │       └── snp
    │           ├── dir
    │           │   └── file
    │           └── file
    ├── table2
    │   └── snapshots
    │       └── snp
    │           ├── dir
    │           │   └── file
    │           └── file
    └── table3
        └── snapshots
            └── snp
                ├── dir
                │   └── file
                └── file

39 directories, 18 files

# find -type d -name snp -execdir sh -c 'cd "$1"; find -mindepth 1 -maxdepth 1 -exec mv -t ../.. \{\} +; cd ../..; rmdir snapshots/snp snapshots' -- {} \; -prune
# tree
.
├── keyspace1
│   ├── table1
│   │   ├── dir
│   │   │   └── file
│   │   └── file
│   ├── table2
│   │   ├── dir
│   │   │   └── file
│   │   └── file
│   └── table3
│       ├── dir
│       │   └── file
│       └── file
├── keyspace2
│   ├── table1
│   │   ├── dir
│   │   │   └── file
│   │   └── file
│   ├── table2
│   │   ├── dir
│   │   │   └── file
│   │   └── file
│   └── table3
│       ├── dir
│       │   └── file
│       └── file
└── keyspace3
    ├── table1
    │   ├── dir
    │   │   └── file
    │   └── file
    ├── table2
    │   ├── dir
    │   │   └── file
    │   └── file
    └── table3
        ├── dir
        │   └── file
        └── file

21 directories, 18 files

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 2)
Ответ на: комментарий от legolegs

Вообще если файлов НЕ «очень много», то можно обойтись простым mv -t ../.. *; вместо find -mindepth 1 -maxdepth 1 -exec mv -t ../.. \{\} +;

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