复制:
find <src-path> -name 'some names' -exec cp {} <dest-path> \;
find <src-path> -name 'some names' | xargs -i cp {} <dest-path>
find <src-path> -name 'some names' | xargs -I {} cp {} <dest-path>
find <src-path> -name 'some names' | xargs -I [] cp [] <dest-path>
find <src-path> -name 'some names' | xargs cp -t <dest-path> 其中,-i 表示 find 传递给xargs的结果由{}来代替,{}为默认占位符,-i为废弃选项,建议用-I。-I表示以什么为xargs结果的占位符。
例如:
------------------->$ ls
1.txt 2.txt 3.txt
------------------->$ find . -type f | xargs -I [] mv [] [].bak
1.txt.bak 2.txt.bak 3.txt.bak
只能将文件拷贝到指定目录,拷贝的文件不会保留原来目录结构,如果子目录下有重叠的文件,将会覆盖,解释如下:
查看当前目录.txt文档
------------------->$ find . -name '*.txt'
./b/.txt
./b/.txt
./b/.txt
./d/.txt
./d/.txt
./d/.txt 检查rm目录是否为空目录
------------------->$ ll ../../rm/
total 将查找到的.txt文档拷贝到rm目录
------------------->$ find . -name '*.txt' | xargs cp -t ../../rm/ 查看rm目录
------------------->$ ls
.txt .txt .txt 注意,rm目录下不是以下结构
./b/3.txt
./b/2.txt
./b/1.txt
./d/3.txt
./d/2.txt
./d/1.txt 拷贝查找到文件的过程如下:
cp ./b/3.txt ../../rm/
...
cp ./d/3.txt ../../rm/ # 覆盖上一次拷贝的3.txt
...
删除:
rm `find . -name 'some names'`
find . -name 'some names' -exec rm {} \;
find . -name 'some names' -ok rm {} \;
find . -name 'some names' | xargs -i rm {}
find . -name 'some names' | xargs -I [] rm []
find . -name 'some names' | xargs rm
其中-ok询问是否确定删除每一项。对于最后一条命令,因为xargs默认将输出流放到最后,所以也可以用xargs rm。
同时也可以将cp、rm替换成其他命令,比如mv,ls等等。