3

ホーム フォルダーを新しいファイル システムに移行しています。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

4 に答える 4

8

cpの -a フラグは、許可、変更時間などを維持します。次のようなことができるはずです。

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

自動化する前に、1 つのディレクトリで試して、必要なことが行われるかどうかを確認してください。

編集:ポールが述べたように、rsyncまたはtarを使用して再帰的なファイルコピーを無効にすることができます。rsync を使用すると、サブディレクトリは保持されますが、ファイルはコピーされません。

sudo rsync -pgodt /home/ /newhome/

tar の --no-recursion は試していないので、コメントできません。

編集2:別の方法

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

参照

于 2008-12-22T20:49:46.803 に答える
4

としてコピー操作を行う場合にのみ、所有者とグループを保持できますroot。与えられたコマンドのほとんどは機能します-tarそしてcp -rpオプションは機能します。

心配する唯一のトリックは書き込み不可能なディレクトリですが、それはroot以外のユーザーにとっての問題です。次に、私は使用する傾向があります:

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

この-depthオプションは、ファイルとサブディレクトリがディレクトリ自体の前に処理されることを意味します。したがって、ディレクトリの書き込み禁止権限は、ディレクトリのすべての内容がそこにコピーされた後にのみ設定されます。''を使用してファイルを逆の順序で一覧表示することもできsort -rます。これにより、ディレクトリがその内容の後に表示されます。

于 2008-12-22T21:44:51.840 に答える
3

これにより、ディレクトリが作成され、すべてのファイルがコピーされます。

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

すべてのファイルをコピーしたくない場合は、最初の tar コマンドに「--no-recursion」を追加することでコピーできる場合があります。

于 2008-12-22T20:53:31.333 に答える
1

これらのディレクトリが同じファイルシステム上にある場合、単純に

cp -p /home/* /newhome/
于 2008-12-22T20:53:49.320 に答える