我想创建一个我们多 TB 文件服务器的结构克隆。我知道 cp --parents 命令可以移动一个文件及其父目录,但有没有办法完整复制目录结构?
我想要复制到一个 Linux 系统,而我们的文件服务器是通过 CIFS 挂载在那里的。
你可以这样做:
find . -type d > dirs.txt
创建目录列表,然后。xargs mkdir -p < dirs.txt
在目标位置创建目录。xargs
可能会超出系统的最大命令长度,因此使用时应谨慎。(可以使用 getconf ARG_MAX
命令查找命令长度限制) 如果有许多目录,则可能需要编写脚本来循环处理输出。 - palswimcd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;
--
是GNU标准工具选项终止符,意思是“嘿,mkdir,在这之后的任何参数都不是标志,所以把它们当作文件参数处理,即使它以 '-' 字符开头。” - amphetamachinersync -a --include '*/' --exclude '*' "$source" "$target"
- Sylvain1行解决方案:
find . -type d -exec mkdir -p /path/to/copy/directory/tree/{} \;
$source
目录下运行,以确保你的新目录相对于 $target
目录。但这不再是一行命令了。使用:pushd $source; find . -type d -exec mkdir -p "$target"/{} \; popd
- will我不知道你是否正在寻找Linux解决方案。如果是的话,你可以尝试这个:
$ mkdir destdir
$ cd sourcedir
$ find . -type d | cpio -pdvm destdir
这将复制目录和文件的属性,但不包括文件数据:
cp -R --attributes-only SOURCE DEST
如果您不感兴趣,可以删除文件属性:
find DEST -type f -exec rm {} \;
这样做是有效的:
find ./<SOURCE_DIR>/ -type d | sed 's/\.\/<SOURCE_DIR>//g' | xargs -I {} mkdir -p <DEST_DIR>"/{}"
只需替换SOURCE_DIR和DEST_DIR即可。
sourceDir="some/directory"
targetDir="any/other/directory"
find "$sourceDir" -type d | sed -e "s?$sourceDir?$targetDir?" | xargs mkdir -p
find . -type d -exec echo "'{}'" \; > dirs2.txt
然后在新创建的目录中重新创建它:
mkdir -p <../<SOURCEDIR>/dirs2.txt
请将target_dir
和source_dir
替换为相应的值:
cd target_dir && (cd source_dir; find . -type d ! -name .) | xargs -i mkdir -p "{}"
已在OSX和Ubuntu上进行测试。