过滤递归命令的输出

过滤递归命令的输出

我正在尝试找到一个 shell 命令,该命令返回包含特定目录中与其同名的其他文件的文件名

答案1

您似乎要求的是一个查找名称与其父目录相同的文件的命令。

您可以使用 GNU 来实现这一点find,使用正则表达式匹配,该匹配使用对前一个路径组件的反向引用,例如

find path/to/somedir -regextype egrep -regex '.*/([^/]*)/\1$'

如果你特别想找到普通的文件匹配其父级(不包括匹配的子级)目录)你可以添加-type f到谓词列表中(或者如果你想仅有的查找子目录,使用-type d)。

为了说明,给定

$ tree
.
├── bar
│   ├── file1
│   ├── file2
│   └── file3
├── baz
│   ├── baz
│   ├── file1
│   ├── file2
│   └── file3
└── foo
    ├── file1
    ├── file2
    └── file3

3 directories, 10 files

然后

$ find . -regextype egrep -regex '.*/([^/]*)/\1$'
./baz/baz

如果只想打印名称(而不是完整路径),可以使用-printf

find . -regextype egrep -regex '.*/([^/]*)/\1$' -printf '%f\n'

相关内容