如何仅从嵌套子目录中移动具有特定扩展名的文件?

时间:2012-07-10 16:33:59

标签: bash

在一个目录中,我有许多子目录,每个子目录都有许多不同类型的文件。我想从每个子目录中提取具有特定扩展名的所有文件,并将其放在不同的文件夹中。是否可以编写一个bash脚本来执行此操作?如果是这样的话?

4 个答案:

答案 0 :(得分:8)

$ find <directory> -name '*.foo' -exec mv '{}' <other_directory> \;

find通过目录结构进行递归搜索,并对找到的符合搜索条件的任何文件执行给定操作。

在这种情况下,-name '*.foo'是搜索条件,-exec mv '{}' <other_directory> \;告诉find 对其找到的任何文件执行 mv,其中'{}'转换为文件名,\;表示命令的结尾。

答案 1 :(得分:6)

如果你有bash v4并且有

shopt -s globstar

在.profile中,您可以使用:

mv ./sourcedir/**/*.ext ./targetdir

答案 2 :(得分:2)

使用find和一个简单的while循环可以做到:

find directory -name '*.foo'|while read file; do
    mv $file other_directory/
done

此处它会将带有.foo后缀的所有文件移动到另一个目录/

答案 3 :(得分:1)

您可以使用 find xargs 来减少对 mv 的循环或多次调用的需要。

find /path/to/files -type f -iname \*foo -print0 |
    xargs -0 -I{} mv {} /path/to/other/dir