首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将多个子目录中选中的文件合并到一个目录中

如何将多个子目录中选中的文件合并到一个目录中
EN

Stack Overflow用户
提问于 2010-11-29 20:09:21
回答 3查看 471关注 0票数 0

我知道这可能是unix人的基础知识,但我还没有在网上找到一个简单的答案。

我有一个包含子目录的目录。其中一些子目录中包含.mov文件。我想将所有mov合并到一个目录中。我不需要担心文件命名冲突,因为文件来自数码相机,它以递增的方式命名文件,但将它们划分为日常文件夹。

抓取所有这些文件并将其复制(或者更好地,移动它们)到我的主文件夹中的目录的Unix-fu是什么?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-29 20:15:37

代码语言:javascript
运行
复制
mv `find . -name "*.mov" | xargs` OUTPUTDIR/

在thkala的评论后更新:

代码语言:javascript
运行
复制
find . -iname "*.mov" | while read line; do mv "$line" OUTPUTDIR/; done
票数 0
EN

Stack Overflow用户

发布于 2010-11-29 20:15:18

这个怎么样?

代码语言:javascript
运行
复制
find "$SOURCE_DIRECTORY" -type f -name '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

如果源目录和目标目录不重叠,这应该可以正常工作。

编辑:

顺便说一句,如果你有大小写混合的扩展(x.mov,y.Mov,Z.MOV),就像很多相机的情况一样,这会更好。匹配时使用不区分大小写的-iname:

代码语言:javascript
运行
复制
find "$SOURCE_DIRECTORY" -type f -iname '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

确保将$SOURCE_DIRECTORY和$TARGET_DIRECTORY变量替换为实际目录,并且它们不会重叠(即目标位于源代码下的某个位置)

编辑2:

附言:我只是注意到卡奇克用他的编辑捕捉到了这个

票数 1
EN

Stack Overflow用户

发布于 2010-11-30 00:28:51

如果你需要处理奇怪的文件名(空格,特殊字符),试试这个:

代码语言:javascript
运行
复制
$ cd <source parent directory>
$ find -name '*.mov' -print0 | xargs -0 echo mv -v -t <target directory>

删除上面的“回显”以实际执行移动,而不是打印将要发生的事情。

"mv -v“给出详细的输出,"mv -t ...”指定目标目录(可能特定于GNU)。

"-print0“和"-0”是用来处理奇怪文件名的扩展名。在非GNU系统上,您可能需要删除这些选项,这将导致换行符分隔的数据。这仍然适用于包含空格的文件名,但不适用于包含换行符的文件名(是的,这是可能的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4303545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档