![Unix find 命令帮助](https://linux22.com/image/1286830/Unix%20find%20%E5%91%BD%E4%BB%A4%E5%B8%AE%E5%8A%A9.png)
嗨,有人能帮我解决下面这句话吗?
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
稍微有点出乎意料,但根据上面的描述,下面的操作应该可以完全满足您的要求:
find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq
答案2
find . -name *.Log -print
这将提供名称以 Log 结尾的所有文件的完整路径。
答案3
查找。(-type d!-name。-prune)-o-type d-name“日志“
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$
答案4
如果您有 GNU find(Linux 和许多其他现代 Unix 都有),您可以使用出色的 printf 运算符并执行以下操作:
find -type f -name '*Log*' -printf '%h\n'
您可能还想通过管道将其传输到sort -u
(或通过sort | uniq
,视情况而定)。请注意,一些商业 UNIX 实现会将其安装为 gfind(或有一个安装它的软件包)。