【问题标题】:How to exclude CWD in a `find` command [duplicate]如何在“查找”命令中排除 CWD [重复]
【发布时间】:2021-01-02 23:38:09
【问题描述】:

如何使用 find 排除当前工作目录 (CWD)?

考虑我当前的工作目录包含以下目录 (ls .):

a b c d e f g

查找命令:find . -maxDepth 1 -type d 将返回:

.
./a
./b
./c
./d
./e
./f
./g

我从这里(How to exclude a directory in find . command)尝试了答案:find . -maxdepth 1 -type d -path . -prune -false

虽然我可以使用 ls,但我很好奇如何使用 find 实现同样的效果。

所以find 命令的预期输出应该类似于ls . 输出:

./a
./b
./c
./d
./e
./f
./g

【问题讨论】:

  • 如果对您有帮助,请尝试关注find . -maxdepth 1 -type d \( ! -name '.' \) -print 吗?顺便说一句,你的maxdepth 里面有D,在find 命令中应该是d
  • find 有一个替代方法,称为 fd (github.com/sharkdp/fd) — 使用此命令会立即产生预期结果 fd --type directory --max-depth 1
  • 我宁愿不依赖像fd这样的外部工具,因为它真的可以用find来完成。
  • @thanasisp eagle eye 你是,我想是的。

标签: bash


【解决方案1】:

您可以使用-mindepth 1 选项来避免匹配.(当前)目录:

find . -mindepth 1 -maxdepth 1 -type d

为了能够只匹配单个字符的目录:

find . -mindepth 1 -maxdepth 1 -type d -name '?'

【讨论】:

  • 这是一个有趣的解决方案,谢谢!
  • @stephanmg 你甚至可以将. 离开:find -mindepth 1 -maxdepth 1 -type d
  • @TedLyngmo:这仅在gnu find 中允许。在 BSD 上发现它会报错
  • @anubhava 啊...我明白了。我猜我用 gnu find 太久了。
  • 哦,那我假设我使用的是 GNU sed,因为 BSD sed 实际上给了我一个错误。 (已验证)
【解决方案2】:

假设您将maxdepth 设置为1,您能否尝试以下操作,因为您只需要获取当前目录的所有目录。

find . -maxdepth 1 -type d \( ! -name '.' \) -print

【讨论】:

  • 完美,也可以。
【解决方案3】:

我认为这也应该有效:find . -maxdepth 1 -type d -\! -name "." -prune

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 2019-10-08
    • 2015-06-27
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2017-05-14
    • 2013-03-23
    • 2011-05-11
    相关资源
    最近更新 更多