我有一个目录,其中包含未知数量的子目录和未知级别的子*目录。如何将所有带有相同后缀的文件复制到新目录?
E.g。从这个目录:
> some-dir
>> foo-subdir
>>> bar-sudsubdir
>>>> file-adx.txt
>> foobar-subdir
>>> file-kiv.txt
将所有* .txt文件移至:
> new-dir
>> file-adx.txt
>> file-kiv.txt
答案 0 :(得分:4)
一种选择是使用find
:
find some-dir -type f -name "*.txt" -exec cp \{\} new-dir \;
find some-dir -type f -name "*.txt"
会在*.txt
目录中找到some-dir
个文件。 -exec
选项为cp file new.txt
表示的每个匹配文件构建命令行(例如{}
)。
答案 1 :(得分:2)
将find
与xargs
一起使用,如下所示:
find some-dir -type f -name "*.txt" -print0 | xargs -0 cp --target-directory=new-dir
对于大量文件,此xargs
版本比使用find some-dir -type f -name "*.txt" -exec cp {} new-dir \;
更高效,因为xargs
会一次将多个文件传递到cp
,而不是调用每个文件cp
一次。因此,使用xargs
版本的fork / exec调用次数会减少。