Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 批量重命名文件以更改数字_Bash - Fatal编程技术网

Bash 批量重命名文件以更改数字

Bash 批量重命名文件以更改数字,bash,Bash,我有一个包含多个文件的目录。每个文件可以有不同的前缀和后缀,但都包含一个六位数的数字。我想批量重命名文件,使其中一个数字发生更改(特别是第二个数字) 比如说 *?2????* -> *?5????* 对于所有文件,第二个数字总是相同的,但其他所有数字都可能不同。使事情更加复杂的是,有些文件有两个六位数的数字。如果两个数字都需要更新 e、 g 有什么指示吗?试试这个: for file in *?2????*; do if [[ $file =~ [0-9]{6} ]]; then

我有一个包含多个文件的目录。每个文件可以有不同的前缀和后缀,但都包含一个六位数的数字。我想批量重命名文件,使其中一个数字发生更改(特别是第二个数字)

比如说

*?2????* -> *?5????*
对于所有文件,第二个数字总是相同的,但其他所有数字都可能不同。使事情更加复杂的是,有些文件有两个六位数的数字。如果两个数字都需要更新

e、 g

有什么指示吗?

试试这个:

for file in *?2????*; do
    if [[ $file =~ [0-9]{6} ]]; then
        echo mv "$file" "$(sed 's/2/5/g' <<< "$file")"
    else
        echo mv "$file" "$(sed 's/[0-9]/5/2' <<< "$file")"
    fi
done
用于*?2???*中的文件;做
如果[[$file=~[0-9]{6}]];然后

echo mv“$file”“$”(sed's/2/5/g)讨论
rename
命令还有无数其他问题,这里的要求似乎过于具体,不允许任何普遍适用的答案比“在文件上循环并使用匹配的文件名重命名”更具体“。我认为OP说,在两个6位字符串的情况下,两个字符串都需要更新(根据他的例子,以不同的方式更新)。抱歉,输入错误。是的,两个字符串都需要更新,但方式相同-两个字符串中的第二个数字最初将相同,需要更改为相同的数字。不完全符合我的要求。我想更改第二个数字。而您的脚本将2的所有实例都更改为5。但我认为您已经给了我足够的时间,可以使用并尝试然后算出答案。谢谢。如果你认为答案有用,你可以“投票”它。如果你认为答案回答得很好,你可以通过点击
复选标记的大纲来“接受”它(将为绿色),这样,搜索stackechange网站的人就会知道问题得到了很好的回答。这就是stackechange网站的工作原理,谢谢;)
for file in *?2????*; do
    if [[ $file =~ [0-9]{6} ]]; then
        echo mv "$file" "$(sed 's/2/5/g' <<< "$file")"
    else
        echo mv "$file" "$(sed 's/[0-9]/5/2' <<< "$file")"
    fi
done