情况是我有一个目录A,文件夹中有一堆文件和文件夹。例如文件夹B,文件夹C,tmp1.txt,Hello.txt,tmp3.txt,okay.txt。在文件夹B中,也有一堆文件。因此,我想将所有txt文件都递归地移动到另一个文件夹(例如/ home)。这是我的代码。
find . -name "*.txt"| grep -v [\s\S]*tmp[\s\S]* -exec mv {} /home \;
我只能选择这些文件,但是它不会执行移动操作。enter image description here
因为linux find在结果中有路径。所以它使我非常烦恼。
要仅移动常规文件,请添加-type f
并使用\!
排除不需要的文件:
find . -type f -name '*.txt' \! -name '*tmp*' -exec mv -i -t /home {} +
-i
要求许可是否已覆盖文件,并且一次调用+
会使用\;
而不是mv
来移动尽可能多的文件(因此,我们需要使用-t
选项指定目标目录,因为{}
包含多个文件)。