Linux 如何查找目录中只有一个文件但没有';别再吃了

Linux 如何查找目录中只有一个文件但没有';别再吃了,linux,bash,unix,Linux,Bash,Unix,我想做的事情有点难以解释。假设我有一个目录,其中有一群不同的用户向其中提交内容。我要求每个人提供一个扩展名为“.foo”的文件。然后我向每个人要了一个扩展名为“.bar”的文件。我想要一份所有提交了.foo但没有提交.bar的人的名单 我假设您以某种方式使用grep两次,并在grep中包含所有者名称,但这就是我感到困惑的地方。我试图在一个命令管道中完成这一切 这就是我试图检索名称的步骤: find . -type f -printf "%u %f\n" | grep '%u .foo' | gr

我想做的事情有点难以解释。假设我有一个目录,其中有一群不同的用户向其中提交内容。我要求每个人提供一个扩展名为“.foo”的文件。然后我向每个人要了一个扩展名为“.bar”的文件。我想要一份所有提交了.foo但没有提交.bar的人的名单

我假设您以某种方式使用grep两次,并在grep中包含所有者名称,但这就是我感到困惑的地方。我试图在一个命令管道中完成这一切

这就是我试图检索名称的步骤:

find . -type f -printf "%u %f\n" | grep '%u .foo' | grep -v '%u .bar'
我这里的两个问题是
%u
没有从
printf
中给出名称,并且排除条部分不依赖于grep foo。它的意思是列出所有拥有foo的人的名字,然后删除提交bar的人的名字

结构按要求:

|--myDirectory
   ├── samantha.foo - (owner: samantha warren)
   ├── samantha.bar - (owner: samantha warren
   ├── robert.foo   - (owner: robert jones)
   ├── doug.foo     - (owner: doug field)
   ├── doug.bar     - (owner: doug field)
   ├── emily.foo    - (owner: emily smith)
输出应如下所示:

robert jones
emily smith

在Linux文件所有权的意义上,它看起来不像
samantha.foo
属于
samantha
。这里的所有权似乎在您的应用程序中。如果文件名包含所有者名称,则可以尝试以下操作:

# Get all files with extensions foo and bar
foos=(*.foo)
bars=(*.bar)
# Strip the extensions to get the usernames
users_with_foo=("${foos[@]%.foo}")
users_with_bar=("${bars[@]%.bar}")
# Filter the usernames.
grep -vxf <(printf "%s\n" "${users_with_bar[@]}") <(printf "%s\n" "${users_with_foo[@]}")
#获取扩展名为foo和bar的所有文件
foos=(*.foo)
巴=(*.bar)
#剥离扩展以获取用户名
用户_与_foo=(“${foos[@]].foo}”)
用户\u与\u bar=(“${bar[@]].bar}”)
#过滤用户名。

grep-vxf多个用户如何在同一目录中“提交”相同的文件名?每一个都会覆盖上一个。不要让我们猜测您的问题的细节,。请参阅(允许zipfiles与in-placedir/files)作为指定与dirs/sub-dirs/files相关的Q的极好示例。编辑您的Q,以包括应处理和不应处理的示例文件/目录,然后包括您所需的结果。祝你好运,表演好!很高兴你得到了答案。祝你好运。谢谢,我不得不稍微调整一下,把它放到一个命令管道中,但它肯定给了我正确的答案。你能解释一下printf的过滤过程是如何工作的吗?