我需要创建现有 Linux 目录和文件夹子目录的镜像,如下所示。
我们有“/opt/current”目录,其中另一层有 20 个子目录,再一层有 50 个子目录,依此类推...还有更深的子目录层,从父目录到子目录总共有 1000 个目录。 /opt/current 安装在 Oracle ZFS 设备上。
如何在新位置 /opt/New 中创建精确的镜像目录/子目录结构,而不是像一对一目录那样手动创建并应用权限。 /opt/New 安装在另一个 ZFS 设备上。
有没有一种方法/脚本可以在 /opt/New 路径中创建与 /opt/current 路径中相同的所有者/组/其他权限的从父到子的整个目录结构?
谢谢,CG
答案1
rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New
这将用于精确复制inrsync
的目录结构,同时避免复制任何文件。/opt/local
/opt/New
选项-a
( --archive
) 将确保保留所有权限等(此选项也意味着递归复制),并且-v
( --verbose
) 将为您提供命令进度的指示。
我们--include='*/'
在传输中明确包含任何目录,但排除其他所有目录--exclude='*'
。命令行上这些选项的顺序很重要。
/
末尾的也/opt/current/
很重要,因为没有它,结果将是创建/opt/New/current
而不是直接写入/opt/New
。
答案2
POSIXly 并假设目录名称不包含换行符,并且$srcdir
和$dstdir
是绝对路径:
(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")
某些pax
实现支持获取要复制的以 NUL 分隔的文件列表,并带有-0
允许使用 NUL 的文件名的选项:
(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")
(-print0
也是一个非 POSIX 扩展)。
答案3
或者可以选择rsync
find /opt/current -type d -print0 | cpio -0pma backup/dir/
答案4
您可以制作如下脚本...将其放入文件中:
-- bash 脚本/ksh 脚本语法需要根据 shell 进行更改 ----
find . -name "*"|while read line
do
if [[ -d ${line} ]]
then
echo ${line}
fi
do
在服务器上您正在制作文件
cat file |while read line
do
mkdir ${line}
done