LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1032|回复: 12

小心翼翼地请教各位老大一个命令!

[复制链接]
发表于 2007-10-28 00:50:56 | 显示全部楼层 |阅读模式
如何删除某个目录temp和它的子目录下面所有以D和J开头的文件(不包括目录),谢谢啊!我都不好意思问。
发表于 2007-10-28 01:18:22 | 显示全部楼层
ll -1 /your_dir/D* | grep ^- | cut -d " " -f8 | xargs rm -rf
慎用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-28 06:48:33 | 显示全部楼层
大侠,不行啊。请问是double l么?我把它alias为ls -l了,是
ll -1 /temp/D* /temp/J* |grep ^-|cut -d " " -f8|xargs rm -rf
这样么? 但是不行啊,我在root目录下做了测试,
debian:~# ls
commands                                                                       
debian:~# ls commands/
Ddd  Dte.i  Dtest.y                                                            
debian:~# ll -l /root/D* | grep ^- | cut -d " " -f8 | xargs rm -rf
ls: /root/D*: No such file or directory
debian:~# ls commands/
Ddd  Dte.i  Dtest.y                                                           
debian:~#
回复 支持 反对

使用道具 举报

发表于 2007-10-28 09:29:40 | 显示全部楼层
Post by darling1111
如何删除某个目录temp和它的子目录下面所有以D和J开头的文件(不包括目录),谢谢啊!我都不好意思问。

find temp -type f -regex '.*/[DJ].*' -print0 |xargs -0 rm -fr
  1. man find
复制代码

晕 xargs 命令都写错。
回复 支持 反对

使用道具 举报

发表于 2007-10-28 09:57:03 | 显示全部楼层
Post by showboy
ll -1 /your_dir/D* | grep ^- | cut -d " " -f8 | xargs rm -rf
慎用


呵呵,讨论一下:
  1. ll
复制代码

这种写法恐怕会让看到的人更迷惑,因为并不是约定俗成的写法,只能让人去猜,楼主倒并没有猜错
  1. ll -1
复制代码

本意应该是让每行都只输出一个文件,但是 ls 会自动判断,如果输出是管道的话,本来就是一行一个文件名。如果用 ls | less  来测试一下就会清楚了。(这一点有些吹毛求疵了 :cool: )
  1. ll -1 /your_dir/D*
复制代码

这个视乎楼主的要求,如果是子目录下又有子目录的话,恐怕就达不到目的了。
  1. cut -d" " -f8
复制代码

这个cut用的相当的悬,一般情况下,如果不能确定空白字符的数量的话,还是用 awk 来分比较稳妥,如 awk '{print $8}'
  1. ll -1 /your_dir/D* | grep ^- | cut -d " " -f8 | xargs rm -rf
复制代码

整体上再说一下,这条命令没有考虑到文件名会有空格的可能,在实际运用中有可能会出现没有预料到的结果。

呵呵,不好意思,有点无聊+啰嗦,希望 showboy 不要见怪。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-28 10:19:59 | 显示全部楼层
感谢两位大侠,现在可以了,真的很感谢
回复 支持 反对

使用道具 举报

发表于 2007-10-28 10:53:29 | 显示全部楼层
Post by achaoge
find temp -type f -regex '.*/[DJ].*' -print0 |xargs -0 rm -fr

  1. man find
复制代码


晕 xargs 命令都写错。



find temp -type f -regex '.*/[Dj][^/]*' -exec rm -f '{}' \;

解释:
因为他需要找到的是以D和j开头的文件(不是目录),因此
表达式不能用 .*/[Dj].*  因为这样的话,有以D或j开头的子目录的话,也是符合条件的

.*/[Dj][^/]*  才能获取所有以D或j开头的文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-28 13:24:30 | 显示全部楼层
嗯?但我刚才试的时候,子目录下面有以D开头的目录,这些目录并没有被删除啊
回复 支持 反对

使用道具 举报

发表于 2007-10-28 19:06:07 | 显示全部楼层
Post by springwind426
find temp -type f -regex '.*/[Dj][^/]*' -exec rm -f '{}' \;

解释:
因为他需要找到的是以D和j开头的文件(不是目录),因此
表达式不能用 .*/[Dj].*  因为这样的话,有以D或j开头的子目录的话,也是符合条件的

.*/[Dj][^/]*  才能获取所有以D或j开头的文件


有 -type f 啊,这个就是限定找普通文件而不是其它的如目录(-type d)、软链(-type l)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-28 19:18:11 | 显示全部楼层
老大,帮我看看apache问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表