Shell脚本列出子目录文件路径

acdbxzyw 2012-04-29 09:44:03
在该脚本中,我使用 ls -R 命令列出所有子目录和文件。然后针对目录,我使用 $file_dir 记录其路径,而针对文件,我将目录路径$file_dir与文件名$file_name拼接起来,然后显示文件的路径。
问题是 else 分支中$file_dir始终为空,并不是先前记录的值,请问这是怎么回事?是变量的作用域方面的问题吗?
新手请教,感谢回复。
#! /bin/bash

ls -R |
while read file_name
do
#echo $file_name
echo $file_name |
if grep "^\." > /dev/null
then
file_dir=`echo $file_name | sed 's\:$\/\'`
#echo $file_dir
else
#echo $file_dir
file_path=$file_dir$file_name
#echo $file_path
if [ -f "$file_path" ]
then
echo $file_path
fi
fi
done
...全文
723 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nessunsweet 2013-10-29
  • 打赏
  • 举报
回复
您好! 管道符不是很理解,怎么去掉还能成功运行?
昵称很不好取 2012-04-30
  • 打赏
  • 举报
回复
用管道了,在子shell里执行,而在子shell中对变量的修改不会反应到当前shell中,所以file_dir为空
acdbxzyw 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

对于目录,ls -R 会在目录后面显示一个冒号吧,你拼接的时候要把这个冒号换成/


话说,为什么不直接使用find . 实现你的功能要求?
[/Quote]
因为我是菜鸟,呵呵。。。
acdbxzyw 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用管道了,在子shell里执行,而在子shell中对变量的修改不会反应到当前shell中,所以file_dir为空
[/Quote]
多谢回复,那应该消除管道。
justkk 2012-04-30
  • 打赏
  • 举报
回复
对于目录,ls -R 会在目录后面显示一个冒号吧,你拼接的时候要把这个冒号换成/


话说,为什么不直接使用find . 实现你的功能要求?

23,126

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧