如何根据文件类型复制文件

时间:2014-10-28 20:01:51

标签: linux macos terminal

我有一个包含子文件夹的文件夹。在这些子文件夹中都有.jpg和.mov文件。

我想要做的是将树复制到另一个根文件夹,但只包含.mov文件。

是否有一个我可以发出的终端命令会像魔术那样做?我希望那里有一个像忍者一样的技能的linux大师可以为我节省很多时间。

示例:

当前:

Pictures
-- 2014
----- January
--------- file1.jpg
--------- file1.mov
----- February
--------- file1.jpg
--------- file1.mov
----- March
--------- file1.jpg
--------- file2.jpg
----- April
--------- file1.mov
--------- file2.mov



Desired:
Pictures
-- 2014
----- January
--------- file1.jpg
----- February
--------- file1.jpg
----- March
--------- file1.jpg
--------- file2.jpg



Movies
-- 2014
----- January
--------- file1.mov
----- February
--------- file1.mov
----- April
--------- file1.mov
--------- file2.mov

3 个答案:

答案 0 :(得分:1)

我建议使用rsync,我希望OS X上的语法相同

rsync -vrR --include="*.jpg" --include="*/" --exclude="*" /path/to/source /path/to/target

由于目标目标不同,您需要为* .mov和* .jpg运行两个单独的命令

答案 1 :(得分:1)

我会将finddirname一起使用。应该在Linux和MacOS中以相同的方式工作。这是一个应该在bash中运行的shell脚本。

注意:以确保您没有在错误的位置或$source$target的错误值运行它我用{{1}为所有基本命令加前缀这样它将打印命令,而不是执行它。确保它符合您的预期,然后移除所有echo(例如,仅使用echo替换echo mkdir ...)。在编写复杂的shell脚本时,这是一种常见的预防措施。

mkdir ...

这里我们遍历source="/path/to/source" target="/path/to/target" cd "$source" find . -type f -name '*.mov' | while read fn ; do path=`dirname $fn` echo mkdir -p "$target/$path" # -p is essential here echo cp "$fn" "$target/$path/" done 目录中的*.mov文件列表,对于每个文件,我们使用$source提取目录名称。然后我们使用dirname$target中创建相应的子目录(这将创建所有必需的子目录,如果目录已经存在则不会失败)并最终复制文件。

答案 2 :(得分:0)

如果它会帮助某人,我实际上找到了一个不需要命令行的简单解决方案。我使用FreeFileSync将文件复制到新树,然后返回并使用finder删除复制过的文件。仍然是一个两步过程,但它很简单,因为它没有使用命令行。

FreeFileSync具有过滤功能,因此我只能隔离要复制的视频。

从图片文件夹中删除视频就像使用finder的搜索功能和仅对视频文件类型进行过滤一样简单。然后一次删除就把它们全部杀了。