shell 使用文本文件bash重命名多个文件

carvr3hs  于 2022-12-19  发布在  Shell
关注(0)|答案(1)|浏览(139)

我想使用具有适当名称的.txt文件重命名我的文件这些是我的文件:

lesson1.mp4
lesson2.mp4
lesson3.mp4
...

这是我的txt文件,文件名为:
我想要的结果是:

dl5txlt9

dl5txlt91#

大概是这样的
file.txt及其内容
*.mp4文件。

lesson1.mp4
lesson2.mp4
lesson3.mp4
lesson4.mp4

剧本。

#!/bin/sh

counter=1

while IFS= read -r files; do
  echo mv -v "lesson$counter.mp4" "$files.mp4"
  counter=$((counter+1))
done < file.txt

使用bash的另一种方法

#!/usr/bin/env bash

counter=1

while [[ -e lesson$counter.mp4 ]]; do
  IFS= read -r files &&
  echo mv -v "lesson$counter.mp4" "$files.mp4"
  ((counter++))
done < file.txt

事先知道课程的数量,看起来像是知道的。使用大括号扩展和bash。

#!/usr/bin/env bash

for file in lesson{1..4}.mp4; do
  IFS= read -r files &&
  echo mv -v "$file" "$files.mp4"
done < file.txt
  • 如果对输出满意,请删除echo

不使用echo时的输出

renamed 'lesson1.mp4' -> '1 Entry to vim.mp4'
renamed 'lesson2.mp4' -> '2 Basic of vim.mp4'
renamed 'lesson3.mp4' -> '3 vim motion.mp4'
renamed 'lesson4.mp4' -> '4 Search and Replace.mp4'

编辑:
这是我的txt文件,文件名为:
因为不清楚text文件是否包含名称的内容,或者是文本文件本身具有唯一名称,如下所示。
下面是后者的解决方案
*.mp4文件

lesson1.mp4
lesson2.mp4
lesson3.mp4
lesson4.mp4
lesson5.mp4
lesson6.mp4
lesson7.mp4
lesson8.mp4
lesson9.mp4
lesson10.mp4
lesson11.mp4

单个文本文件:
bash脚本。

#!/usr/bin/env bash

counter=1
shopt -s nullglob
text_files=([1-9]*\ [Vv]im*)
shopt -u nullglob

while [[ -e "lesson$counter.mp4" ]]; do
  for i in "${!text_files[@]}"; do
    [[ -f "${text_files[i]}" ]] &&
    text_files_counter="${text_files[i]%% *}"
    (( counter == text_files_counter )) &&
    echo mv -v "lesson$((counter++)).mp4" "${text_files[i]}.mp4" &&
    unset -v 'text_files[i]'
  done
  text_files=("${text_files[@]}")
done

不使用echo时的输出

renamed 'lesson1.mp4' -> '1 Entry to vim.mp4'
renamed 'lesson2.mp4' -> '2 Basic of vim.mp4'
renamed 'lesson3.mp4' -> '3 vim motion.mp4'
renamed 'lesson4.mp4' -> '4 Search and Replace vim.mp4'
renamed 'lesson5.mp4' -> '5 macros vim.mp4'
renamed 'lesson6.mp4' -> '6 buffers vim.mp4'
renamed 'lesson7.mp4' -> '7 tabs vim.mp4'
renamed 'lesson8.mp4' -> '8 windows vim foo.mp4'
renamed 'lesson9.mp4' -> '9 insert vim.mp4'
renamed 'lesson10.mp4' -> '10 vim global.mp4'
renamed 'lesson11.mp4' -> '11 help vim.mp4'

相关问题