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