标签:测试文件 move 文件 运用 文件中 使用 目标 优势 asc
Linux常用命令(五)今天,我们继续总结linux的find命令,find命令经常与另外两个命令exec和xargs一起使用,那么今天我们就看看他们到底是怎么使用的吧。
-exec参数后面跟的是command命令,以‘;’为结束标志,并且要在‘;’之前增加‘\’,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
find[文件目录]... -exec [commond] {} \;
用-exec选项执行ls命令
[root@ERICSSON Test]#
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log test11
[root@ERICSSON Test]# find . -type f -name "*log" -exec ls -ld {} \;
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./1.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./2.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./3.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./4.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./5.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./6.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./7.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./8.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./9.log
-rw-r--r--. 1 root root 0 Apr 18 11:40 ./10.log
在目录中查找目标文件并用-exec选项执行rm删除命令
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log test11
[root@ERICSSON Test]# find . -type f -name "*log" -exec rm {} \;
[root@ERICSSON Test]# ls
test11
[root@ERICSSON Test]#
note: 运用rm命令时一定要小心 最好使用交互模式 增加参数-i
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log test11
[root@ERICSSON Test]# find . -type f -name "*log" -exec rm -i {} \;
rm: remove regular empty file ‘./1.log’? y
rm: remove regular empty file ‘./2.log’? y
rm: remove regular empty file ‘./3.log’? y
rm: remove regular empty file ‘./4.log’? y
rm: remove regular empty file ‘./5.log’? y
rm: remove regular empty file ‘./6.log’? y
rm: remove regular empty file ‘./7.log’? y
rm: remove regular empty file ‘./8.log’? y
rm: remove regular empty file ‘./9.log’? y
rm: remove regular empty file ‘./10.log’? y
[root@ERICSSON Test]# ls
test11
查找文件移动到指定目录
[root@ERICSSON /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys Test tmp usr var
[root@ERICSSON /]# cd Test/
[root@ERICSSON Test]# ls
Test01
[root@ERICSSON Test]# cd Test01/
[root@ERICSSON Test01]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log
[root@ERICSSON Test01]# cd ..
[root@ERICSSON Test]# cd Test01/
[root@ERICSSON Test01]# find . -name "*.log" -exec mv {} .. \;
[root@ERICSSON Test01]# ls
[root@ERICSSON Test01]# cd ..
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log Test01
[root@ERICSSON Test]#
xargs命令相对于exec命令由两大优势。
其一,xargs相对于exec命令是分段处理一部分文件在继续进行运行,而不像exec一样执行全部文件,在有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。
其二,某些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。
somecommand |xargs -item command
-a file 从文件中读入作为sdtin
-p 当每次执行一个argument的时候询问一次用户。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
-L num 从标准输入一次读取 num 行送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
定义一个测试文件,内有多行文本数据,变为单行输出
[root@ERICSSON Test]# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
[root@ERICSSON Test]# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@ERICSSON Test]#
利用-n参数限定xargs每次读取的参数的个数
[root@ERICSSON Test]# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
[root@ERICSSON Test]# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
[root@ERICSSON Test]#
-d 选项可以自定义一个定界符
# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
结合 -n 选项使用:
# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name
查找系统中的一个普通文件,用xargs命令测试它的文件类型
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log
[root@ERICSSON Test]# find . -type f -print | xargs file
./1.log: empty
./2.log: empty
./3.log: empty
./4.log: empty
./5.log: empty
./6.log: empty
./7.log: empty
./8.log: empty
./9.log: empty
./10.log: ASCII text
[root@ERICSSON Test]#
查找当前目录中具有读/写/可执行的文件,并修改相应的权限chmod(该命令后续讲解)
[root@ERICSSON Test]# ll
total 4
-rw-r--r--. 1 root root 8 Apr 18 14:25 10.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 1.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 2.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 3.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 4.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 5.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 6.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 7.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 8.log
-rw-r--r--. 1 root root 0 Apr 18 12:04 9.log
[root@ERICSSON Test]# find . -type f -print | xargs chmod 777
[root@ERICSSON Test]# ll
total 4
-rwxrwxrwx. 1 root root 8 Apr 18 14:25 10.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 1.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 2.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 3.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 4.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 5.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 6.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 7.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 8.log
-rwxrwxrwx. 1 root root 0 Apr 18 12:04 9.log
与grep命令(管道符后面会有讲解)结合过滤出指定的专有名词
[root@ERICSSON Test]# ls
10.log 1.log 2.log 3.log 4.log 5.log 6.log 7.log 8.log 9.log
[root@ERICSSON Test]# echo ‘shenwei is a good person‘>10.log
[root@ERICSSON Test]# cat 10.log
shenwei is a good person
[root@ERICSSON Test]# find . -type f -print | xargs grep "shen"
./10.log:shenwei is a good person
[root@ERICSSON Test]#
标签:测试文件 move 文件 运用 文件中 使用 目标 优势 asc
原文地址:https://blog.51cto.com/12002695/2380704