每日一个linux命令17-find之xargs篇

2017-04-24  本文已影响0人  1519f8ccc7b0

使用exec可能存在的问题:

  1. 在使用find命令匹配的文件运行exec命令时,find命令会把匹配到的文件全部传递给exec命令,但有些系统对能够传送的exec命令有长度限制;
  2. 在有些系统中,会为每个匹配的find文件执行exec命令启动一个进程,这些在匹配文件较多时,会造成巨大的资源浪费;

而xargs则可以解决这两个问题:

  1. xargs会分页传送匹配的文件给命令;
  2. xargs只会启动一个进程运行命令;

参数

使用-i参数表示:find命令的输出用{}代替
-lN是一次处理N个参数
-t是处理之前打印出命令

示例:

  1. 移动文件 -i
[root@test findTest]# ls
2rd  f1  F1  f1.bak  F1.bak  f2  F2  f2.bak  F2.bak  f3  F3  f3.bak  F3.bak  f4  f4.bak  test.sh
[root@test findTest]# find . -type f -name "*.bak" | xargs -i mv {} 2rd/
[root@test findTest]# ls 2rd
3rd  f1  F1  f1.bak  F1.bak  f2  F2  f2.bak  F2.bak  f3  F3  f3.bak  F3.bak  f4  f4.bak
[root@test findTest]# 
  1. 移动文件 -l -t
[root@test test]# find . -type f -name "*.bak"|xargs -t -l2 -i mv {} findTest/
mv ./f3.bak findTest/ 
mv ./F3.bak findTest/ 
mv ./F1.bak findTest/ 
mv ./f2.bak findTest/ 
mv ./f4.bak findTest/ 
mv ./F2.bak findTest/ 
mv ./f1.bak findTest/ 
  1. 搜索包含特定字符的文件
[root@test test]# find . -type f| xargs grep "Everything"
./lessTest/Kconfig:   Everything in tmpfs is temporary in the sense that no files will be
./moreTest/Kconfig:   Everything in tmpfs is temporary in the sense that no files will be
  1. 确认是否继续执行 -p
[root@test test]# ls
catTest  f1.bak  f.bak  findTest  headTest  lessTest  moreTest  nlTest
[root@test test]# find . -type f -name "*.bak"| xargs -p rm  -f
rm -f ./f.bak ./f1.bak ?...y
[root@test test]# ls
catTest  findTest  headTest  lessTest  moreTest  nlTest
上一篇下一篇

猜你喜欢

热点阅读