将文件夹结构(无文件)从一个位置复制到另一个位置

r00*_*fus 82 linux directory copy file

我想创建一个我的多TB文件服务器结构的克隆.我知道cp - parent可以移动文件和它的父结构,但有没有办法复制目录结构完整?

我想复制到linux系统,我们的文件服务器安装在那里CIFS.

Gre*_*ill 140

你可以这样做:

find . -type d >dirs.txt
Run Code Online (Sandbox Code Playgroud)

然后创建目录列表

xargs mkdir -p <dirs.txt
Run Code Online (Sandbox Code Playgroud)

在目标上创建目录.

  • @Jealie将命令改为`find.-type d -print0> dirs.txt`和`xargs -0 mkdir -p <dirs.txt`.这将导致两个命令都使用空值作为分隔符而不是空格. (20认同)
  • 如果目录名中包含空格,则此解决方案将无效. (7认同)
  • 那么权限和属性会被保留吗? (3认同)
  • @TrevorBoydSmith:谢谢你的评论.最初的问题没有提到需要保留权限,所有权或属性的任何内容.如你所述,这样做需要一个不同的解决方案,但上述内容足以回答所提出的问题. (3认同)
  • 当你开始处理数百或数千的订单时,`xargs`可以超过系统的最大命令长度,因此请谨慎使用.(使用`getconf ARG_MAX`查找命令长度限制.)对于许多目录,您可能必须编写脚本来循环输出. (2认同)

amp*_*ine 69

cd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;
Run Code Online (Sandbox Code Playgroud)

  • `--`是标准的GNU实用程序选项终止符.它意味着"嘿mkdir,在此之后的任何参数,它不是一个标志,所以将它视为文件参数,即使它以' - '字符开头." (6认同)
  • 这个答案也**不保留目录权限和属性**.[使用rynsc保留权限和属性](/sf/answers/647001841/) (4认同)
  • 找到我的最佳答案.另外你可以试试陈雷维的`rsync`解答[这个问题](http://stackoverflow.com/questions/11946465/copy-a-directory-structure-with-file-names-without-content) (2认同)
  • 什么是 - mkdir的选择? (2认同)

小智 23

这是一个使用rsync的简单解决方案:

rsync -av -f"+ */" -f"- *" "$source" "$target"
Run Code Online (Sandbox Code Playgroud)
  • 一条线
  • 没有空格问题
  • 保留权限

我在那里找到了解决方案

  • 相同但更具可读性`rsync -a --include'*/' - exclude'*'"$ source""$ target"` (7认同)
  • 此解决方案的问题是:我的文件夹包含数千个文件,而 rsync 需要很长时间才能同步十几个文件夹。 (2认同)

Igo*_*gor 14

1行解决方案:

find . -type d -exec mkdir -p /path/to/copy/directory/tree/{} \;
Run Code Online (Sandbox Code Playgroud)

  • 这工作得很好而且很聪明。一个皱纹 ylu 必须位于 `$source` 目录中,以确保您的新树相对于 `$target` 目录。但这不再是一行了。使用:`pushd $source; 寻找 。-type d -exec mkdir -p "$target"/{} \; 流行音乐` (2认同)

小智 6

如果您正在寻找Linux上的解决方案,我不知道.如果是这样,你可以试试这个:

$ mkdir destdir
$ cd sourcedir
$ find . -type d | cpio -pdvm destdir
Run Code Online (Sandbox Code Playgroud)


tol*_*ira 5

这将复制目录和文件属性,但不复制文件数据:

cp -R --attributes-only SOURCE DEST
Run Code Online (Sandbox Code Playgroud)

然后,如果您对文件属性不感兴趣,可以删除它们:

find DEST -type f -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

  • 我认为责任完全在于那些尝试使用 Windows 进行实际工作的人。 (3认同)