【问题标题】:linux: how to batch rename folder name and the file name under folderlinux:如何批量重命名文件夹名和文件夹下的文件名
【发布时间】:2015-11-13 13:09:12
【问题描述】:

我需要帮助来完成重命名文件夹和脚本的脚本。

例如:我当前的文件夹和文件如下:

Gideon/gideon_lisha/Gideon_samuel/Gideon_nathan.xml
Gideon/lisha_gideon/Gideon_noah.xml
...

我想要一个 shell 命令来重命名它们,如下所示:

Liang/Liang_lisha/Liang_samuel/Liang_nathan.xml
Liang/lisha_Liang/Liang_noah.xml
...

我绑了:

#!/bin/bash

path=$1
filename=$2
newfilename=$3

echo "We are finding '$filename' under the folder '$path'"

count=1

for i in `find $path -iname *$filename*`

do
    newpath=`echo $i | sed "s/$filename/$newfilename/g"`
    sudo mv "$i" "$newpath"
    echo "${count}: Renaming $i to $newpath"
    let count++
done

但脚本将停止:

Liang/gideon_lisha/Gideon_samuel/Gideon_nathan.xml

因为改了文件夹名,所以找不到下一个路径。我不知道如何让脚本从内到外运行而不是从外到内运行。

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    终于找到答案了:

    #!/bin/bash
    
    path=$1
    filename=$2
    newfilename=$3
    
    echo "We are finding '$filename' under the folder '$path'"
    
    count=1
    for i in `find $path -iname "*$filename*" | tac`
    do
        newpath=`echo $i | sed "s@\(.*\)$filename@\1$newfilename@i"`
        sudo mv "$i" "$newpath"
        echo "${count}: Renaming $i to $newpath"
        let count++
    done
    

    非常感谢@susbarbatus!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      相关资源
      最近更新 更多