使用变量重命名目录

使用变量重命名目录

我有一个包含数千个子目录的目录。结构如下:

目录:

  • 1
  • 2
  • 三十
  • 109

我想通过在当前名称上添加 10000 来重命名所有目录。例如

目录:

  • 10001
  • 10002
  • 10030
  • 10109

我已经写了这个脚本

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd='expr $f + 10000'
        echo $newd
        mv $f newd
    fi
done

从 2 中echo,我可以看到 1 和 10001。但实际上mv将我的所有目录移动到了一个名为 newd 的新文件夹中。我试过 $newd,但效果不好。

怎样才能使这个东西发挥作用呢?

答案1

尝试这个:

for f in *; do 
    if [[ -d $f ]] ; then 
        mv "$f"  $(($f + 1000))
    fi
done

答案2

如果你这么做会怎么样?

for f in *; do
    if [[ -d $f ]]; then
        echo $f
        newd=`expr $f + 10000`
        echo $newd
        mv "$f" "$newd"
    fi
  done

也就是说,将引号改为expr $f + 10000反引号,这样它们就可以就地执行,结果会存储在变量中。另外,确保行$newd上有美元符号mv

我对自己不是 100% 确定,因此请确保在尝试之前进行备份,或者尝试一些测试文件/目录。

编辑:在答案中添加了双引号,因为它们是必需的。

答案3

您还可以使用rename

for f in *; do 
    [ -d "$f" ] && rename -n 's/$_/$_+1000/e' "$f"
done

如果要重命名每个文件或目录,只需运行:

rename -n 's/$_/$_+1000/e' *

相关内容