2010-11-29 56 views
0

我知道这可能是unix人的基本功能,但我还没有在网上找到直接的答案。如何将多个子目录中的选定文件整合到一个目录中

我有一个子目录的目录。其中一些子目录中有.mov文件。我想将所有的movs整合到一个目录中。我不需要担心文件命名冲突,因为这些文件来自数码相机,并且它逐渐为文件命名,但将它们分为每日文件夹。

什么是Unix-fu抓取所有这些文件并复制(甚至更好,移动它们)到我的home文件夹中的目录?

感谢。

回答

0
mv `find . -name "*.mov" | xargs` OUTPUTDIR/ 

更新后thkala的评论:

find . -iname "*.mov" | while read line; do mv "$line" OUTPUTDIR/; done 
1

这个怎么样?

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中和$目标目录变量与实际的目录和他们不重叠(即目标源下能在别处)

编辑2:

PS:我只注意到khachik抓住了这个一个与他的编辑

+0

@thkala我不知道为什么,但代码不工作,或删除或“* .mov”文件... – khachik 2010-11-29 12:45:30

+0

@khachik你没有用你的实际路径替换$ SOURCE_DIRECTORY和$ TARGETDIRECTORY,对吧?因为它在这里工作得很好...... – thkala 2010-11-29 13:04:00

+0

@thkala SureL`找到。 -type f ....“OUT /”';'OUT是一个现有的目录。 – khachik 2010-11-29 13:08:02

0

如果你需要应付古怪的文件名(空格,特殊字符),试试这个:

$ cd <source parent directory> 
$ find -name '*.mov' -print0 | xargs -0 echo mv -v -t <target directory> 

删除“回声”上述实际做的举动,而不是打印会发生什么。

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

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

相关问题