递归搜索将指定文件类型从一个位置移动到另一个保留目录结构的目录

时间:2009-02-24 19:50:14

标签: shell file automation dos

是否有某种方法可以指定目录(让我们说“C:\ images”)并将每个.jpg文件从那里移动到另一个目录(比如“D:\ media”),但保留目录结构(如果移动后的文件是“C:\ images \ paintball \ july \ 07 \ headshot.jpg”将是“D:\ media \ paintball \ july \ 07 \ headshot.jpg”)?

我正在使用cygwin(但是如果有效的话也很乐意使用DOS)。

4 个答案:

答案 0 :(得分:2)

烨。

在保留目录结构(有一个开关)的同时执行* .jpg文件的tar存档,然后将其解压缩到目标目录。应该是一个单行。

答案 1 :(得分:2)

( cd /cygdrive/c/images
tar --create --file - . ) | ( cd /cygdrive/d/media
tar --extract --file - )

在某些版本的tar中还有一个--directory选项,你可以避免子套之间管道的复杂性,但我自己从不使用它,所以我可能会遗漏一些东西:

tar --create --file - -C /cygdrive/c/images . | tar --extract --file - -C /cygdrive/d/media

如果您需要更多功能/灵活性,请花点时间研究rsync。

由于您在Windows上,您还可以查看xxcopy。对于这类东西和其他很多东西都很棒。

答案 2 :(得分:0)

你也可以使用 xcopy 命令,就像这个例子中一样(old是一个目录):

xcopy cvs_src\*.jpg old /e/i/h/y/d/exclude:files_to_exclude

答案 3 :(得分:0)

感谢XCOPY解决方案,它解决了我的类似问题,所以我想我会为其他需要它的人分享细节。

我想要一个目录(和子目录)中不属于特定类型的所有文件的列表(不是副本),例如* .jpg。但是DIR命令没有排除功能。所以我:

  1. 创建了一个名为exclist.txt的文件,其中包含一行“.jpg”
  2. 执行命令“xcopy c:\ files c:\ test /exclude:exclist.txt / l / d / e / h / i / y> found.txt”
  3. 在记事本中打开found.txt以查看非jpg文件列表
  4. 请注意XCOPY / l参数,该参数列出要复制的文件而不复制它们。由于XCOPY以“列表模式”执行,因此不会创建目标文件夹c:\ test,也不会复制任何文件。 “> found.txt”将XCOPY命令的输出保存到文件found.txt,而不是在屏幕上显示结果。