开发者

How to consolidate selected files from multiple sub-directories into one directory

I know this is probably elementary to unix people, but I haven't found a straightforward answer online.

I have a directory with sub-directories. Some of these 开发者_JAVA百科sub-dirs have .mov files in them. I want to consolidate all the movs to a single directory. I don't need to worry about file naming conflicts because the files are from a digital camera and it names the files incrementally, but divides them into daily folders.

What is the Unix-fu for grabbing all these files and copying (or even better, moving them) to a directory in my home folder?

Thanks.


How about this?

find "$SOURCE_DIRECTORY" -type f -name '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

If the source and target directories do not overlap this should work fine.

EDIT:

BTW, if you have mixed-case extensions (x.mov, y.Mov, Z.MOV) as is the case with many cameras, this would be better. It uses -iname which is case-insensitive when matching:

find "$SOURCE_DIRECTORY" -type f -iname '*.mov' -exec mv '{}' "$TARGET_DIRECTORY" ';'

Make sure to replace the $SOURCE_DIRECTORY and $TARGET_DIRECTORY variables with the actual directories and that they do not overlap (i.e. the target being somewhere under the source)

EDIT 2:

PS: I just noticed that khachik caught this one with his edit


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

Update after thkala's comment:

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


If you need to cope with weird filenames (spaces, special characters), try this:

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

Remove the "echo" above to actually do the move, rather than print what would happen.

"mv -v" gives verbose output, "mv -t ..." specifies the target directory (possibly GNU-specific).

"-print0" and "-0" are extensions to cope with weird filenames. On non-GNU systems you might need to remove those options, which will result in newline-separated data. This will still work on filenames with spaces, but not filenames with newlines (yes, it's possible).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜