Unix find命令帮助


0

嗨,有人可以帮我做下一行吗?

find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"

基本上,它应该找到目录中存在名称中带有“ Log”的文件。

我有这样的结构:

/logs
  |
  |
  ----folder1
  |       |
  |       |
  |       ---App1LogDate.txt
  |
  ----folder2
  |      |
  |      |
  |      ---App2LogDate.txt
  |
  |
  |--App3LogDate.txt
  |
  |--App4LogDate.txt

因此,鉴于我将在/ logs目录中运行此行,因此应获得以下结果:

.
./folder1
./folder2

总共3个目录。


1
您是要说-type d而不是-type f在“或”部分中说?
glenn jackman 2011年

Answers:


1

稍微偏左,但根据上面的描述,以下内容应完全满足您的要求:

find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq

啊,我们有ksh88,它-E不起作用,有什么建议吗?
Dima

试试find . -type f -name "*Log*" -print | awk 'BEGIN { FS="/"; OFS="/"; } { $NF = ""; print; }' | sort | uniq

0
find . -name *.Log -print 

这将提供所有名称以Log结尾的文件的完整路径。


我只需要存在这些文件的目录
Dima

1
find . -type f -name '*.Log' -print | sed 's,/[^/]*$,,' | sort -u
基思·汤普森

美丽!奇迹般有效 。

0

找 。(-type d!-name。-prune)-o -type d -name“ Log

tmp$ ls
App3LogDate.txt  App4LogDate.txt  folder1  folder2
tmp$ ls folder*
folder1:
App1LogDate.txt

folder2:
App2LogDate.txt
tmp$ find . \( -type d ! -name . -prune \) -o -type d -name "*Log*"
./folder2
./folder1
tmp$

当前目录丢失
Dima

0

如果您有GNU查找(就像Linux和许多其他现代Unix一样),则可以使用很棒的printf运算符并执行以下操作:

find -type f -name '*Log*' -printf '%h\n'

您可能还希望通过sort -u(或通过sort | uniq,通过)将其通过管道传输。请注意,某些商业UNIX实现将以gfind的形式安装(或具有以这种方式安装的软件包)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.