perl +递归重命名文件和目录

perl +递归重命名文件和目录

也许有人有可以重命名文件名或目录名的工具脚本(perl 或 shell 脚本)?

例如

该工具需要从文件中读取以下内容:

   more file

   /var         Local      exportlocal
   /etc        data         Data
  1. 第一个字段 $1 – 在此目录下搜索的目录名称

  2. 第二个字段-需要搜索的文件/目录的名称

  3. 第三个字段-需要重命名的新文件/目录的名称

真实示例(运行工具之前)

    /var/tmp/Local

真实示例(运行该工具后)

    /var/tmp/exportlocal

答案1

假设文件是​​空格分隔的(字段之间有制表符和/或空格,每个记录以换行符结尾),并且文件和目录名称不包含这些字符:

#!/bin/sh
while read -r branch oldname newname
do
    find "$branch" -depth -name "$oldname" -exec sh -c 'mv "$1" "${1%/*}/$2"' _  {} "$newname" \;
done < file-with-names

编辑:

将命令更改find如下,为每个重命名的文件输出一条消息:

    find "$branch" -depth -name "$oldname" -exec sh -c 'mv "$1" "${1%/*}/$2"; echo "$1 was renamed to $2 under $3"' _  {} "$newname" "$branch" \;

相关内容