shell命令递归操作
递归复制
应⽤场景:拷贝指定⽬录的⼦⽬录下所有特定格式的⽂件到另⼀个⽬录中,如:拷贝A⽬录下所有的.so⽂件到B⽬录中(A⽬录⾥⾯有很多⼦⽂件夹):
find A/ -name '*.so' | xargs -i cp {} B/
解释:
find A/ -name '*.so' 正则表达式递归查 A ⽬录下所有的 .so ⽂件;
xargs(英⽂全拼: eXtended ARGuments)是给命令传递参数的⼀个过滤器,也是组合多个命令的⼀个⼯具。
-a file 从⽂件中读⼊作为 stdin
-e flag ,注意有的时候可能会是-E,flag必须是⼀个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停⽌。
-
p 当每次执⾏⼀个argument的时候询问⼀次⽤户。
-n num 后⾯加次数,表⽰命令在执⾏的时候⼀次⽤的argument的个数,默认是⽤所有的。
-t 表⽰先打印命令,然后再执⾏。
-i 或者是-I,这得看linux⽀持了,将xargs的每项名称,⼀般是⼀⾏⼀⾏赋值给 {},可以⽤ {} 代替。
-r no-run-if-empty 当xargs的输⼊为空的时候则停⽌xargs,不⽤再去执⾏了。
linux递归删除目录命令-s num 命令⾏的最⼤字符数,指的是 xargs 后⾯那个命令的最⼤命令⾏字符数。
-L num 从标准输⼊⼀次读取 num ⾏送给 command 命令。
-l 同 -L。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这⾥修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使⽤。。
-
P 修改最⼤的进程数,默认是1,为0时候为as many as it can ,这个例⼦我没有想到,应该平时都⽤不到的吧。
递归修改c⽂件权限:find ./ -name "*.c" | xargs chmod 777
递归将⽬录下的所有⽬录权限更改为 777(以下两条命令效果⼀致)
find -type d -exec chmod 777 {} \;
find -type d | xargs chmod 777
递归将⽬录下所有⾮⽂件(即⽬录)权限更改为 644(以下两条命令效果⼀致)
find -not -type f -exec chmod 644 {} \;
find -not -type f | xargs chmod 644
-d 表⽰修改⽬录, -f 表⽰修改⽂件,加 -not 表⽰⾮。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。