How can I make the “find” Command on OS X default to the current directory?

后端 未结 7 1852
清酒与你
清酒与你 2021-02-13 07:21

I am a heavy command line user and use the find command extensively in my build system scripts. However on Mac OS X when I am not concentrating I often get output l

相关标签:
7条回答
  • 2021-02-13 07:44

    If you must call it 'find', then you want:

    alias find=/usr/bin/find\ .
    

    in your .profile or .bash_profile or …. Substitute the real path (if not /usr/bin/find) on your Mac OSX. Enter the full path to avoid cycles (bash normally would interpret alias find=find without issues, but better be sure).

    But you better not name the alias find (findl, myfind etc), because it will become a habit and trouble for you if you try it on another system.

    0 讨论(0)
  • 2021-02-13 07:47

    If you can't discipline yourself to use find 'correctly', then why not install GNU find (from findutils) in a directory on your PATH ahead of the system find command.

    I used to have my own private variant of cp that would copy files to the current directory if the last item in the list was not a directory. I kept that in my personal bin directory for many years - but eventually removed it because I no longer used the functionality. (My 'cp.sh' was written in 1987 and edited twice, in 1990 and 1997, as part of changes to version control system notations. I think I removed it around 1998. The primary problem with the script is that cp file1 file2 is ambiguous between copying a file over another and copying two files to the current directory.)

    Consider writing your own wrapper to find:

    #!/bin/sh
    [ ! -d "$1" ] && set -- . "$@"
    exec /usr/bin/find "$@"
    

    The second line says "if argument 1 is not a directory, then adjust the command line arguments to include dot ahead of the rest of the command. That will be confusing if you ever type:

    ~/bin/find /non-existent/directory -name '*.plist' -print
    

    because the non-existent directory isn't a directory and the script will add dot to the command line -- the sort of reason that I stopped using my private cp command.

    0 讨论(0)
  • 2021-02-13 07:49

    This is probably not what you want but how about: alias find="find ."

    or choose a new name (findl for find local?)

    0 讨论(0)
  • 2021-02-13 08:05

    I would suggest that if you're writing scripts (which are more likely to be migrated from one system to another sometime in the future) that you should try to use the more specific form of the command, that is specifying the "." instead of relying on a default. For the same reason, I might even suggest writing sh scripts instead of relying on bash which might not be installed everywhere.

    0 讨论(0)
  • 2021-02-13 08:05

    You may want to run the commands found in this link: https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/

    It is a bit outdated, for example I found I did not have to add many commands to my path at all.

    This covers your problem by having your system use the Non-BSD find utility from the findutils package, while also installing other tools you may want as well.

    0 讨论(0)
  • 2021-02-13 08:08

    Install GNU find instead.

    $ brew install findutils
    $ alias find=gfind
    

    Yay, it works!

    0 讨论(0)
提交回复
热议问题