我有一个这样的目录:
.
./foo/.bar/bar/file.jpg
./foo/.bar/xyw/dummy.fil
./foo3/.bar/file.jpg
./foo3/.bar/bar/file.jpg
./fo/bar/file.jpg
我尝试列出所有包含该单词的子目录bar
(不包括.bar
)。然后在这些文件夹中执行命令(ls
入门简单)。
我正在尝试使用 find,但我不知道如何在bar
不采取任何措施的情况下进行过滤.bar
:(
编辑
我已经测试了以下几种组合find
:
find . -d -name '*bar*' -exec {ls}
find . -d | grep 'bar'
问题是我不知道如何过滤.bar
和保留bar
。
答案1
您的第一个命令有两个问题find
。
- 您需要排除
.bar
目录。我们可以将 添加-not
到我们的find
来实现这一点。 - 你
ls
不会像那样工作。find
在你开始的同一目录中运行你的命令,所以你需要提供ls
一个参数来{}
传递 find 正在查看的目录。
其结果是:find . -type d -name '*bar*' -not -name '.bar*' -exec 'ls' '{}' ';'
您还需要用a 来终止-exec
for ,但是 shell 会解释这一点,因此您必须将其放在引号中才能使其通过。find
;
find
我不确定您是否希望排除'.bar*'
或'.bar'
,但我希望您可以自定义其中的一部分。从 Unix 的角度来看,无论哪种方式都可以。这取决于您的偏好和用例。