shell 编程基础——删除文件而不删除文件夹

最好的学习方法,莫过于从实践中学习。

首先需要区分文件和文件夹,需要使用 find 命令加 -type f 的参数,找出文件下下的所有文件。其次再通过rm -rf 的命令删除文件。我首先想到的是这样子的

find -type f | rm -rf 
rm: missing operand
Try 'rm --help' for more information.

目录下是有文件的,结果却报 rm 命令没有加operand ;查阅资料后发现rm 命令不支持管道。于是我想着把find 出来的文件用变量保存,再通过rm删除。第一种方法命令如下。

FIHSER155:test $ a=`find -type f` ; rm -rf $a
FIHSER155:test $ find -type f
FIHSER155:test $

目的达成了。注意** `` ** 这个符号是反单引号,键盘符号1的左边那个键盘。

这个是指第一个命令执行完后不管成功与否再执行后面的指令,就是一组命令列表。类似shell 脚本里面的换行。

其实还有第二种方法,也是比较普遍的方法, 那就是用 xargs 指令,让不支持管道的命令采用类似管道的做法。命令如下:

 find -type f | xargs rm -rf

关于xargs 的详细用法可以参考以下网址
xargs详细用法

还有第三种方法
对find 命令深入了解后发现find 命令的 -exec 参数也能实现这个功能,代码如下:

$ find -type f
./ext4.ext4
./source/keytest.sh
./source/static/static.h
./source/static/static.c
./source/static/main.c
......
$ find -type f -exec rm -rf {} \;
$ find -type f

但是方法一和方法三是有缺陷的,因为 -exec 和变量的方式 是将查找的范围一次性发送到后面的命令当中,当查找到的结果较多会导致命令行参数溢出。因此还是推荐第二种方式。

喜欢博主的麻烦一键三连,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值