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