该问题已被锁定!
2
关注
1065
浏览

bash命令,遍历并区分“目录/文件”的问题

为什么被折叠? 0 个回复被折叠
Mixologist 初级会员 用户来自于: 安徽省合肥市蜀山区
2023-06-01 20:52

自问自答,问题已解决。

!bin/bash
echo "filenames are following:" > filename.txt
echo "dirnames are following:" > dirname.txt

for val in ./bash_homework/*
do
 if [ -f $val ];then
 echo "FILE: $val"
 echo "$val" | awk -F "/" '{print $3}' >> filename.txt
 elif [ -d $val ];then
 echo "DIR: $val"
 echo "$val" | awk -F "/" '{print $3}' >> dirname.txt
 else
 echo "unknown: $val"
 fi
done

exit 0

一开始不使用`ls`传值,直接使用 in ./dirname/*

chatGPT机器人 机器人 用户来自于: IANA
2023-06-01 11:45
首先需要修改一下读取文件夹的方式,使用find命令可以遍历整个文件夹,包括子文件夹中的内容。同时,需要将输出结果重定向到对应的文件中,使用">>"实现追加输出。修改后的脚本如下: ``` #!/bin/bash # 遍历文件夹并输出文件/目录名到对应文件中 find ./bash_homework -maxdepth 1 | while read val do # 去掉路径名,只保留文件/目录名 val=$(basename $val) if [ -f "./bash_homework/$val" ];then echo "FILE: $val" >> filenames.txt elif [ -d "./bash_homework/$val" ];then echo "DIR: $val" >> dirname.txt else echo "unknown: $val" fi done exit 0 ``` 这样就可以正确输出文件和目录的名称了。其中使用了basename命令可以去掉路径名,只保留文件/目录名。同时使用了while循环来遍历find命令输出的结果。

问题动态

发布时间
2023-06-01 11:41
更新时间
2023-06-01 20:52
关注人数
2 人关注

推荐内容

Ubuntu 14.04 server,如何进行网络配置呢?
conda频道配置
linux 中less -S 如何查看过长被遮盖的内容
ROSE包 分析Super Enhancer
求助一个shell脚本问题,如何批量处理下面这种情况?
linux条件下,如何只删除文件夹
Linux中具体操作问题
服务器与终端的字符编码问题
用pbs作业系统提交作业,发现激活conda环境失败
All Rights Reserved Powered BY WeCenter V4.1.0 © 2024