给定以下目录结构:
$ tree --noreport dir
dir
├── fileA
├── .hiddenfileA
├── .hiddendirA
| ├── .hiddenfileB
│ ├── fileC
│ └── fileD
└── dirA
├── .hiddenfileC
├── fileE
└── fileF
要求是调用 find 以便从结果中排除来自隐藏目录但不是隐藏文件(在非隐藏目录下)的文件。
预期回报应该类似于:
./.hiddenfileA
./dirA/.hiddenfileC
./dirA/fileE
./dirA/fileF
./fileA
做了一些研究并在这里找到了导致我创建以下调用的信息find
$ find . -type f -not -path '*/\.*' -print
但是这个解决方案的缺点是跳过了隐藏的目录和文件。
修剪隐藏目录并将结果限制为文件:
正如jthill所建议的,您可能更喜欢过滤掉目录,这将导致显示文件、链接等:
您拥有的命令非常接近工作。利用
*/.*/*
查找 a/.
(暗示以 开头的段名.
) 后跟(最终)a — 所以以开头的段名不能 是最后一个(文件名);即,它必须是目录名。/
.
-path
使用文件名扩展模式;又名 glob 或通配符。所以你不需要把\
before.
。-not
如果您想移植到非 GNU 系统,请不要使用。代表“不”的使用!
由 POSIX 指定,并且适用于每个版本find
(甚至是 BSD、Solaris 等以及古老的系统)。