我知道这可能是unix人的基础知识,但我还没有在网上找到一个简单的答案。
我有一个包含子目录的目录。其中一些子目录中包含.mov文件。我想将所有mov合并到一个目录中。我不需要担心文件命名冲突,因为文件来自数码相机,它以递增的方式命名文件,但将它们划分为日常文件夹。
抓取所有这些文件并将其复制(或者更好地,移动它们)到我的主文件夹中的目录的Unix-fu是什么?
谢谢。
发布于 2010-11-29 20:15:37
mv `find . -name "*.mov" | xargs` OUTPUTDIR/在thkala的评论后更新:
find . -iname "*.mov" | while read line; do mv "$line" OUTPUTDIR/; done发布于 2010-11-29 20:15:18
这个怎么样?
find "$SOURCE_DIRECTORY" -type f -name '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'如果源目录和目标目录不重叠,这应该可以正常工作。
编辑:
顺便说一句,如果你有大小写混合的扩展(x.mov,y.Mov,Z.MOV),就像很多相机的情况一样,这会更好。匹配时使用不区分大小写的-iname:
find "$SOURCE_DIRECTORY" -type f -iname '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'确保将$SOURCE_DIRECTORY和$TARGET_DIRECTORY变量替换为实际目录,并且它们不会重叠(即目标位于源代码下的某个位置)
编辑2:
附言:我只是注意到卡奇克用他的编辑捕捉到了这个
发布于 2010-11-30 00:28:51
如果你需要处理奇怪的文件名(空格,特殊字符),试试这个:
$ cd <source parent directory>
$ find -name '*.mov' -print0 | xargs -0 echo mv -v -t <target directory>删除上面的“回显”以实际执行移动,而不是打印将要发生的事情。
"mv -v“给出详细的输出,"mv -t ...”指定目标目录(可能特定于GNU)。
"-print0“和"-0”是用来处理奇怪文件名的扩展名。在非GNU系统上,您可能需要删除这些选项,这将导致换行符分隔的数据。这仍然适用于包含空格的文件名,但不适用于包含换行符的文件名(是的,这是可能的)。
https://stackoverflow.com/questions/4303545
复制相似问题