shell遍历目录并提取子目录/文件名字

参考:

(18条消息) Linux shell遍历文件夹——提取文件名和目录名_墨理学AI的博客-CSDN博客_shell遍历文件夹并提取文件名字

(18条消息) shell中#*,##*,#*,##*,% *,%% *的含义及用法_jiezi2016的博客-CSDN博客_shell 中% 

一. 预备知识

介绍下Shell中的${}、##和%%使用范例,本文给出了不同情况下得到的结果。
假设定义了一个变量为:
代码如下:
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
${file##*.}:删掉最后一个 .  及其左边的字符串:txt
${file%/*}:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

二. shell 遍历文件夹内所有文件代码实现

function getdir(){
    echo $1
    for file in $1/*
    do
    if test -f $file
    then
        echo $file
        arr=(${arr[*]} $file)
    else
        getdir $file
    fi
    done
}
getdir /wls
echo ${arr[@]}



使用${} 提取字符串, 用于字符串的读取,提取和替换功能:

1、提取文件名

var=/dir1/dir2/file.txt
echo ${var##*/}
    file.txt

2、提取后缀

echo ${var##*.}
    txt

3、提取不带后缀的文件名,分两步

tmp=${var##*/}
echo $tmp
    file.txt
echo ${tmp%.*}
    file

4、提取目录

echo ${var%/*}
    /dir1/dir2


使用文件目录的专有命令basename和dirname
1、提取文件名,注意:basename是一个命令,使用( ) , 而 不 是 (), 而不是(),而不是{}

echo $(basename $var)
    file.txt

2、提取不带后缀的文件名

echo $(basename $var .txt)
    file

3、提取目录

dirname $var
    /dir1/dir2
echo $(dirname $var)
    /dir1/dir2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

denglin12315

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值