xargs doesn't recognize bash aliases

后端 未结 6 520
猫巷女王i
猫巷女王i 2020-12-13 03:21

I\'m trying to run the following command:

find . -iname \'.#*\' -print0 | xargs -0 -L 1 foobar

where \"foobar\" is an alias or function def

6条回答
  •  借酒劲吻你
    2020-12-13 03:58

    Since only your interactive shell knows about aliases, why not just run the alias without forking out through xargs?

    find . -iname '.#*' -print0 | while read -r -d '' i; do foobar "$i"; done
    

    If you're sure that your filenames don't have newlines in them (ick, why would they?), you can simplify this to

    find . -iname '.#*' -print | while read -r i; do foobar "$i"; done
    

    or even just find -iname '.#*' | ..., since the default directory is . and the default action is -print.

    One more alternative:

     IFS=$'\n'; for i in `find -iname '.#*'`; do foobar "$i"; done
    

    telling Bash that words are only split on newlines (default: IFS=$' \t\n'). You should be careful with this, though; some scripts don't cope well with a changed $IFS.

提交回复
热议问题