如果find命令的输出是文件系统上的文件或目录,我想将linux中的find命令别名为一个函数,该函数将打印绝对路径?
这是我到目前为止得到的,但它不起作用。
find_with_abspath(){
for i in $(find "$@")
do
if [ -e "$i" ];
then
readlink -m "$i"
else
echo -n "$i"
fi
done
}
你知道我做错了什么吗?
## define your function
abspath() {
while read -r; do
[[ -d $REPLY || -f $REPLY ]] && readlink -m "$REPLY"
done
}
## run as:
$ find foo -iname "*.png" | abspath
## or:
$ abspath < <(find .. -.. ..)
您不需要在函数中重新定义CCD_ 1。您的函数可以用于获取输入,并打印绝对路径。
适用于ZSH:的siegex答案的改编
# usage: afind . -name *.html
afind() { baseDir=$(readlink -f $1); shift; command find $baseDir "$@" }
最好的解决方案是在调用命令之前将给定给find
的路径转换为绝对路径。下面的bash-1-liner通过截取find
命令、操作路径然后调用真正的find
命令来实现这一点。
find(){ ( set -f; command find $(readlink -f $1) ${@:2}; ) };