繁体   English   中英

如何使用名称中的计数将不同文件夹中的所有文件重命名为另一个文件夹?

[英]How to rename all the files across different folders into another folder using count in the name?

我在 Ubuntu 下,我想编写一个 bash 脚本,以便将以下配置更改为:

--images
  |--video1
  |  |--frame1.jpg
  |  |--frame2.jpg
  |  |-- ...
  |  |--frame32.jpg
  |
  |--video2
  |  |--frame1.jpg
  |  |--frame2.jpg
  |  |-- ...
  |  |--frame32.jpg
  |
  |-- ...
  |
  |--video900
  |  |--frame1.jpg
  |  |--frame2.jpg
  |  |-- ...
  |  |--frame32.jpg

|--images
|--final_images
|  |--frame1.jpg
|  |--frames2.jpg
|  |-- ...
|  |--frame28800.jpg

我的目标是将每个视频的所有帧移动到同一目录final_images中。 所以首先我想将 go 放入每个文件夹并将每个帧重命名为frame1, frame2,..., frame28800 (每个视频有 32 帧,我有 900 个视频,所以我的帧总数为 28800)。 然后我想将所有重命名的帧移动到final_images中。 任何帮助将不胜感激,我不是很精通 bash。

编辑:这是我尝试过的,位于图像文件夹中:

A=0; 
for i in $(ls -d */); do 
    for file in $(ls ${i%%} */); do 
       mv "$(pwd)/${i%%}${file%%}" "$(pwd)/${i%%}${file%%}_$A" ;  
       ((A++)); 
       echo $A ;  
    done ; 
done

这些可能是算法步骤:

  • 初始化一个计数变量
  • 从源目录获取所有文件
  • 排除目录。 我们只需要文件
  • 将源文件复制到目标文件夹,使用计数变量重命名
  • 增加计数变量
source_folder=$1
target_folder=$2

mkdir -p $target_folder

echo "procesing..."
count=1
for file in $source_folder/* $source_folder/**/* ; do

  if [[ -f $file ]]; then

    cp  $file $target_folder/frame$count.jpg
    echo "source:"$file "target:"$target_folder/frame$count.jpg
    count=$((count + 1))

  else
      echo "$file is not valid or is folder"
  fi
done;

echo ""
echo "target_folder: $target_folder"
find  $target_folder | sort

保存并使用以下参数执行:

bash merge_frames.sh /tmp/workspace/source/ /tmp/workspace/target

结果:

结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM