遍历所有文件夹并按顺序重命名文件夹内的所有文件 1.*、2.*、3.*

遍历所有文件夹并按顺序重命名文件夹内的所有文件 1.*、2.*、3.*

这不起作用...我对 sh 脚本仍然不太熟练。

for imageFolder in *; do
    [ -d $imageFolder ] && cd "$imageFolder" && 
        for file in *.*
        do
          echo "$file" #"${file/?/?}" //the bit I am stuck on I believe.
        done
done

我有以下文件夹结构,我希望所有文件都以以下方式开始,1而不是0

姓名

因此文件夹结构如下

在此处输入图片描述

答案1

我不相信你会找到一个${file/?/?}产生数字序列的参数替换 - 尤其是每个文件夹的数字序列。相反,你需要设置和增加一个变量。

哪些参数替换(具体来说${file##*.}将要有用的是提取文件扩展名,以便您可以将其重新添加到顺序文件名中。例如,您可以这样做:

#!/bin/bash

shopt -s nullglob

for imageFolder in */; do 
  cd "$imageFolder" || continue
  n=1
  for file in *.*; do 
    echo mv -- "$file" "$((n++)).${file##*.}"
  done
  cd -
done

或(使用子 shell)

#!/bin/bash

shopt -s nullglob

for imageFolder in */; do 
(
  cd "$imageFolder" || exit
  n=1
  for file in *.*; do 
    echo mv -- "$file" "$((n++)).${file##*.}"
  done
)
done

相关内容