Как я могу нерекурсивно переносить каталоги с помощью Perl или shell? - PullRequest
3 голосов
/ 22 декабря 2008

Мы переносим домашние папки в новую файловую систему, и я ищу способ автоматизировать ее с помощью Perl или сценария оболочки. У меня нет особого выбора в языках программирования, поскольку системы являются проприетарными кластерами хранения, которые должны оставаться как можно более неизменными.

Задача: В каталоге / home / у меня есть домашние папки различных пользователей aaa, bbb, ccc, ... и у них есть определенные разрешения и право владения пользователем / группой, которые должны оставаться неизменными при миграции на / newhome /. Вот пример того, что нужно перенести из / home:

drwxr-xr-x    3 aaaaa    xxxxxxxxx   4096 Feb 26  2008 aaaaa/
drwxrwxrwx   88 bbbbbbb  yyyyyy      8192 Dec 16 16:32 bbbbbbb/
drwxr-xr-x    6 ccccc    yyyyyy      4096 Nov 24 04:38 ccccc/
drwxr-xrwx   36 dddddd   yyyyyy      4096 Jun 20  2008 dddddd/
drwxr-xr-x   27 eee      yyyyyy      4096 Dec 16 02:56 eee/

Итак, точно такие же папки с разрешениями и владельцами должны быть созданы в / newhome. Копирование / перемещение файлов не должно быть проблемой, поскольку это будет обработано позже.

Кто-нибудь работал над таким сценарием? Я действительно новичок в Perl, поэтому мне нужна помощь.

Ответы [ 4 ]

8 голосов
/ 22 декабря 2008
Флаг

cp сохранит права доступа, время модификации и т. Д. Вы должны иметь возможность сделать что-то вроде:

for a in `ls /home`; do cp -a "/home/$a" "/newhome/$a" ; done

Попробуйте сделать это с одним каталогом, чтобы узнать, делает ли он то, что вам нужно, прежде чем автоматизировать его.

РЕДАКТИРОВАТЬ: Вы можете отключить рекурсивное копирование файлов с помощью rsync или tar, как упомянуто Полом. В rsync подкаталоги все еще сохраняются, но файлы не копируются:

sudo rsync -pgodt /home/ /newhome/

Я не пробовал tar --no-recursion, поэтому не могу его комментировать.

РЕДАКТИРОВАТЬ 2: Другой способ

find /home/ -maxdepth 1 -print | sudo cpio -pamVd /newhome

Ссылка

4 голосов
/ 23 декабря 2008

Вы можете сохранить владельца и группу, только если выполняете операцию копирования как root. Большинство данных команд будут работать - опции tar и cp -rp.

Единственная хитрость, о которой нужно беспокоиться, это не записываемые каталоги, но это проблема для пользователей без полномочий root. Затем я склонен использовать:

(cd /home; find . -depth) | cpio -pvdumB /newhome

Опция -depth означает, что файл и подкаталоги обрабатываются до самих каталогов, поэтому разрешение на запись в каталог устанавливается только после того, как в него скопировано все содержимое каталога. Вы также можете использовать 'sort -r' для вывода списка файлов в обратном порядке, что обеспечивает отображение каталогов после их содержимого.

3 голосов
/ 22 декабря 2008

При этом будут созданы каталоги и , скопированы все файлы.

cd /home; tar cvBf - . | (cd /newhome; tar xvpBf -)

Если вы не хотите копировать все файлы, вы можете сделать это, добавив "--no-recursion" к первой команде tar.

1 голос
/ 22 декабря 2008

Если эти каталоги находятся в одной файловой системе, то почему бы просто не

cp -p /home/* /newhome/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...