How to exclude this / current / dot folder from find “type d”

后端 未结 4 1928
一向
一向 2020-11-30 19:38
find . -type d

can be used to find all directories below some start point. But it returns the current directory (.) too, which may be

相关标签:
4条回答
  • 2020-11-30 19:56

    POSIX 7 solution:

    find . ! -path . -type d
    

    For this particular case (.), golfs better than the mindepth solution (24 vs 26 chars), although this is probably slightly harder to type because of the !.

    To exclude other directories, this will golf less well and requires a variable for DRYness:

    D="long_name"
    find "$D" ! -path "$D" -type d
    

    My decision tree between ! and -mindepth:

    • script? Use ! for portability.
    • interactive session on GNU?
      • exclude .? Throw a coin.
      • exclude long_name? Use -mindepth.
    0 讨论(0)
  • 2020-11-30 20:00

    Well, a simple workaround as well (the solution was not working for me on windows git bash)

    find * -type d

    It might not be very performant, but gets the job done, and it's what we need sometimes.

    [Edit] : As @AlexanderMills commented it will not show up hidden directories in the root location (eg ./.hidden), but it will show hidden subdirectories (eg. ./folder/.hiddenSub). [Tested with git bash on windows]

    0 讨论(0)
  • 2020-11-30 20:03

    I use find ./* <...> when I don't mind ignoring first-level dotfiles (the * glob doesn't match these by default in bash - see the 'dotglob' option in the shopt builtin: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html).

    eclipse tmp # find .
    .
    ./screen
    ./screen/.testfile2
    ./.X11-unix
    ./.ICE-unix
    ./tmux-0
    ./tmux-0/default
    
    eclipse tmp # find ./*
    ./screen
    ./screen/.testfile2
    ./tmux-0
    ./tmux-0/default
    
    0 讨论(0)
  • 2020-11-30 20:19

    Not only the recursion depth of find can be controlled by the -maxdepth parameter, the depth can also be limited from “top” using the corresponding -mindepth parameter. So what one actually needs is:

    find . -mindepth 1 -type d
    
    0 讨论(0)
提交回复
热议问题