LinuxForum.Fans
Тема

Рекурсивное перемещение файлов по маске с сохранением структуры

Автор: NordWest 30 сообщений 11776 просмотров
#178560
Fat-Zer написал:
нуда... скобки забыл... fixed...
как без него?

вообще-то путь выделяется без слеша. Так проще потом с ним работать.
[console]ksu@ksu:~$ NAME="/a/b/c/d/e/file"
ksu@ksu:~$ echo "${NAME%/*}"
/a/b/c/d/e
[/console]
не написал раньше потому, что не знал, что вы хотите сделать (без скобок непонятно)
выделить имя файла можно так:
[console]ksu@ksu:~$ echo "${NAME##*/}"
file
[/console]
Ну и конечно
[console]ksu@ksu:~$ basename "$NAME"
file
ksu@ksu:~$ dirname "$NAME"
/a/b/c/d/e
[/console]

ЗЫЖ в первом варианте $TARGET_FILE_DIR не использовалась.

ЗЗЫЖ ответ на вопрос "зачем?" будет ясен после того, как вы сравните скорость моего и своего варианта хотя-бы даже на сотне файлов и каталогов.

#178567
drBatty написал:
Ну и конечно

не знал про такое, спасибо...

drBatty написал:
ответ на вопрос "зачем?" будет ясен после того, как вы сравните скорость моего и своего варианта хотя-бы даже на сотне файлов и каталогов.

согласен... скорость в разы медленнее будет...

#178570
Fat-Zer написал:
скорость в разы медленнее будет...

дык зачем тут вообще какие-то скрипты, если cp отлично справляется?

#178579
drBatty написал:
дык зачем тут вообще какие-то скрипты, если cp отлично справляется?

на случай если нужно ещё какое-то хитрое переименование... правда тогда лучше всё в аргументы find упихнуть...

#178582
Fat-Zer написал:
на случай если нужно ещё какое-то хитрое переименование... правда тогда лучше всё в аргументы find упихнуть...

в этих случаях я использую что-то вроде
find УСЛОВИЕ -printf ФОРМАТ | sed ...

PS:
или

find ... >file.list

sed -i '' file.list

while read NAME; do
действие
done <file.list

#178597

Спасибо, вариантов с копированием действительно предостаточно. А вот с перемещением как? У mv нет ключа --parents. Его можно использовать для в накрученном скрипте, где и cp без --parents. Можно было бы копировать и потом удалять, но нет гарантий, что это будет один и тот же список файлов. Или есть какая-то хитрая штука у того же mv, которая скопирует структуру каталога?

#178603

Сижу читаю топик, фраза "перемещение" и здесь же

NordWest написал:
которая скопирует структуру каталога?

может вас rsync спасет? oO

#178611

rsync спасет мир, но не в этом случае :)

i2ks написал:
Сижу читаю топик, фраза "перемещение" и здесь же

Не вижу противоречия. Перемещение - это копирование + удаление скопированного файла.

#178780
NordWest написал:
А вот с перемещением как?

а перемещение это довольно опасная операция. не советую её использовать...

NordWest написал:
Или есть какая-то хитрая штука у того же mv, которая скопирует структуру каталога?

не знаю. это не нужно ИМХО.

NordWest написал:
Перемещение - это копирование + удаление скопированного файла.

а вот и нет. точнее да, но только в том случае, если вы перемещаете в разных ФС. Если в одной и той-же, то mv эт
создание другого имени у файла + удаление старого имени. Можете проверить - в этом случае не нужно даже права чтения файла, достаточно права модификации каталога где источник + права добавления к каталогу-приёмнику.

#380109
drBatty написал:
[console]$ cp -v --parent **/*p.png target/[/console]

Специально зарегился, чтобы спасибо сказать. :)
И спасибо за указание того, что shopt нужно использовать, сам бы не разобрался.
[console]shopt -s globstar[/console]

Войдите или зарегистрируйтесь, чтобы ответить.