linux shell脚本中如何获取文件的绝对路径?readlink可以么?

脚本中想实现的功能是:指定给函数一个路径,函数会遍历这个路径下的所有文件 如果遇到文件夹递归进入文件夹执行函数,如果遇到文件则输出文件的绝对路径。。我用的是readlink -f ‘文件’ 但是获取到的文件绝对路径是错的,里面包含了脚本所在文件夹的路径,请问我该怎么改?
比如说脚本所在路径是/home/test ,我给传给函数的路径是/root/file file文件夹里面有file1和file2 那么我的脚本会输出/hong/test/file1 和/home/test/file2 但是我想要的是/root/file/file1 和 /root/file/file2啊
send_file="/tool/"
function send_file(){
if [ `echo $1 | grep "pcap"` ]
then
echo "file is `readlink -f $1`!!"
elif [ -d $1 ]
then
for each_file in `ls $1`
do
send_file $each_file
done
fi
}
for packet in `ls $send_file`
do
send_file $send_file
done
  这是我的代码 我想列出tool里面的pcap文件 但是要输出绝对路径

传给函数的路径是/root/file,如果这是函数的第一个参数,那么函数中可以用 $1 获取。
得到文件名file1和file2后,echo "$1/file1" 就输出/root/file/file1,echo "$1/file2" 输出/root/file/file2。追问

可是如果多层文件夹的话,里层的函数调用的参数就不是绝对路径了,比如说在当前路径,有个文件夹,那么在此调用函数的参数就仅仅是文件夹名字了啊。。linux下没有直接显示文件的绝对路径的办法么?

追答

没有代码,不清楚你是怎么实现的。

难道你用了 cd 逐层进入目录?其实不推荐这样用。


不过,pwd命令可以得到当前路径,然后再与文件名连接。

echo `pwd`/file1

追问

补充了代码 麻烦帮我看下错哪了

追答

主要是for循环的用法做了些修改;另外,函数名和变量名最好不要相同,免得混淆。

你再试试:

#!/bin/bash
folder="/tool"
send_file()
{
    if [ `echo $1 | grep "pcap"` ]; then
        echo "file is ${1}!!"
    elif [ -d $1 ]; then
        for each_file in $1/*
        do
            send_file $each_file
        done
    fi
}
for packet in ${folder}/*
do
    send_file $packet
done

温馨提示:答案为网友推荐,仅供参考