bash脚本重命名多个文件

标签 bash shell

<分区>

假设我有一堆这样命名的文件:bsdsa120226.nai bdeqa140223.nai 我想将它们重命名为 120226.nai 140223.nai。我如何使用下面的脚本实现这一点?

#!/bin/bash
name1=`ls *nai*`
names=`ls *nai*| grep -Po '(?<=.{5}).+'`
for i in $name1
    do
    for y in $names
        do
            mv $i $y
        done
    done



Solution:
name1=`ls *nai*`

for i in $name1
do
y=$(echo "$i" | grep -Po '(?<=.{5}).+')
mv $i $y
done

最佳答案

这个:

#!/bin/bash

shopt -s extglob nullglob
for file in *+([[:digit:]]).nai; do
    echo mv -nv -- "$file" "${file##+([^[:digit:]])}"
done

如果您对 mv 命令感到满意,请删除 echo

注意。此解决方案假定要删除 5 个前导字符。它将删除所有前导的非数字字符。

关于bash脚本重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589900/

相关文章:

arrays - 在给定索引处添加一个值而不删除

linux - 当我 sudo bash -c 时会发生什么?

regex - 用于查找此格式数字 num :num:num:num 的数字的正则表达式

linux - 取消设置 C-Shell 中的所有环境变量

mysql - 备份用户数据库的Shell脚本

bash - 如何判断字符串是否未在 Bash shell 脚本中定义

bash - Bash 脚本中的字符串比较未按预期工作

bash - 如何在 bash 脚本中使用两个不同的用户

linux - 如何监控访问特定文件的进程?

Bash 补全因短选项而中断