如何使用Perl或shell非递归地迁移目录?

DV.*_*DV. 3 directory shell perl

我们正在将主文件夹迁移到新的文件系统,我正在寻找一种使用Perl或shell脚本自动化它的方法.我在编程语言方面没有太多选择,因为系统是专有存储集群,应尽可能保持不变.

任务:在目录/ 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/
Run Code Online (Sandbox Code Playgroud)

因此,应在/ newhome下创建具有权限和所有权的完全相同的文件夹.复制/移动文件不应该是一个问题,因为它将在以后处理.

有人在制作这样的剧本吗?我是Perl的新手,所以我需要帮助.

cod*_*gic 8

cp'-a标志将保持许可,修改时间等.您应该能够做以下事情:

for a in `ls /home`; do cp -a "/home/$a" "/newhome/$a" ; done
Run Code Online (Sandbox Code Playgroud)

尝试使用一个目录,看看在自动化之前是否做了你需要的东西.

编辑:您可以使用保罗提到的rsync或tar禁用递归文件复制.使用rsync,子目录仍然保留,但不复制文件:

sudo rsync -pgodt /home/ /newhome/
Run Code Online (Sandbox Code Playgroud)

我没有试过tar的--no-recursion,所以无法评论它.

编辑2:另一种方式

find /home/ -maxdepth 1 -print | sudo cpio -pamVd /newhome
Run Code Online (Sandbox Code Playgroud)

参考