LinuxSir.cn,穿越时空的Linuxsir!

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

与basename功能相同的管道何在[已解决]

[复制链接]
发表于 2005-3-19 04:08:18 | 显示全部楼层 |阅读模式
  1. $ find dira/* dirb/* -mtime -1 -type f -print
  2. dira/file1
  3. dira/file2
  4. dirb/file1
  5. dirb/file3
复制代码
可得出这两个目录中昨天修改过的文件清单。但这两个目录可能有重名文件,想过滤掉重名文件。也就是说,希望有这个结果
  1. file1
  2. file2
  3. file3
复制代码
应该用怎样的管道呢?
发表于 2005-3-19 13:09:17 | 显示全部楼层
是不是这样?

find dira/* dirb/* -mtime -1 -type f -print |awk -F/ '{print $NF}'|sort |uniq
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-20 02:12:58 | 显示全部楼层
Mm... 可能使我的例子不太好,用简单的awk可能还是不行。
  1. $ find dira/*.txt dirb/*.asc -mtime -1 -type f -print
  2. dira/file1.txt
  3. dira/file2.txt
  4. dirb/file1.asc
  5. dirb/file3.asc
复制代码
还要得出
  1. file1
  2. file2
  3. file3
复制代码
这样就比较不好办了。
回复 支持 反对

使用道具 举报

发表于 2005-3-20 02:25:05 | 显示全部楼层
Post by fundawang
Mm... 可能使我的例子不太好,用简单的awk可能还是不行。
  1. $ find dira/*.txt dirb/*.asc -mtime -1 -type f -print
  2. dira/file1.txt
  3. dira/file2.txt
  4. dirb/file1.asc
  5. dirb/file3.asc
复制代码
还要得出
  1. file1
  2. file2
  3. file3
复制代码
这样就比较不好办了。


find ...|awk -F'[/.]' '{print $2|"sort|uniq"}'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-20 02:50:38 | 显示全部楼层
Post by DSL
find ...|awk -F'[/.]' '{print $2|"sort|uniq"}'

are you sure?
回复 支持 反对

使用道具 举报

发表于 2005-3-20 10:10:15 | 显示全部楼层
Post by fundawang
are you sure?

I'm sure

但你的文件名不要出现有这样的格式:
dir/fi.le.txt

而你想取
fi.le

则上面的就不能办到
回复 支持 反对

使用道具 举报

发表于 2005-3-20 13:42:46 | 显示全部楼层
[HTML]
find dir{a,b}/* -mtime -1 -type f -printf "%f\n"|sort|uniq
[/HTML]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-21 01:10:22 | 显示全部楼层
恩,忘了find的这个开关了,这样就行了:
  1. find dira/*.txt dirb/*.asc -mtime -1 -type f -printf "%f\n"|awk -F. '{print $1}'|sort|uniq
复制代码
DSL给出的方法也很好,不过我的dira和dirb可能是传入的变量,目录深度不一样,光用$2可能不行。
回复 支持 反对

使用道具 举报

发表于 2007-12-25 16:23:12 | 显示全部楼层
刚学find找到过来..~试了一下,可以用find 的exec选项来运行命令,偶在redhat里试可以,不知其他环境行否.
find dira/* dirb/* -mtime -1 -type f  -exec basename {} \;
回复 支持 反对

使用道具 举报

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

本版积分规则

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