Answers:
您可以执行以下操作:
find . -type d > dirs.txt
创建目录列表,然后
xargs mkdir -p < dirs.txt
在目标上创建目录。
find . -type d -print0 >dirs.txt
和xargs -0 mkdir -p <dirs.txt
。这将导致两个命令都将空值用作分隔符,而不是空格。
xargs
当您开始处理成百上千的订单时,它可能会超过系统的最大命令长度,因此请谨慎使用。(使用来查找命令长度限制getconf ARG_MAX
。)对于许多目录,您可能必须编写脚本以遍历输出。
cd /path/to/directories &&
find . -type d -exec mkdir -p -- /path/to/backup/{} \;
--
是标准的GNU实用程序选项终止符。它的意思是“嘿mkdir,此后的任何参数,它都不是标志,因此即使它以'-'字符开头,也应将其视为文件参数。”
rsync -a --include '*/' --exclude '*' "$source" "$target"
如果您正在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。
来自Sergiy Kolodyazhnyy的python脚本发布在仅复制文件夹而不是文件上?:
#!/usr/bin/env python
import os,sys
dirs=[ r for r,s,f in os.walk(".") if r != "."]
for i in dirs:
os.makedirs(os.path.join(sys.argv[1],i))
或从外壳:
python -c 'import os,sys;dirs=[ r for r,s,f in os.walk(".") if r != "."];[os.makedirs(os.path.join(sys.argv[1],i)) for i in dirs]' ~/new_destination
仅供参考:
另一种方法是使用,tree
它非常方便,并基于其强大的选项导航目录树。有仅目录的选项,排除空目录,排除具有模式的名称,仅包含具有模式的名称等。签出man tree
优点:您可以编辑或查看列表,或者执行大量脚本编写并经常创建一批空目录
方法:使用创建目录列表tree
,使用该列表作为输入的参数mkdir
tree -dfi --noreport > some_dir_file.txt
-dfi
仅列出目录,为每个名称打印完整路径,使树不打印缩进线,
--noreport
省略在树形列表的末尾打印文件和目录报告,只是使输出文件不包含任何绒毛
然后转到您想要空目录的位置并执行
xargs mkdir < some_dir_file.txt
如果可以从Windows计算机获得访问权限,则可以将xcopy与/ T和/ E一起使用以仅复制文件夹结构(/ E包括空文件夹)
[编辑!]
这个使用rsync重新创建目录结构,但是没有文件。 http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
可能会更好:)
这是php中的解决方案:
创建syncDirs.php
具有以下内容的文件:
<?php
foreach (new DirectoryIterator($argv[1]) as $f) {
if($f->isDot() || !$f->isDir()) continue;
mkdir($argv[2].'/'.$f->getFilename(), $f->getPerms());
chown($argv[2].'/'.$f->getFilename(), $f->getOwner());
chgrp($argv[2].'/'.$f->getFilename(), $f->getGroup());
}
以具有足够权限的用户身份运行它:
sudo php syncDirs.php /var/source /var/destination