使用 txt 文件中以逗号分隔的两个或多个单词的名称重命名一组图像文件

使用 txt 文件中以逗号分隔的两个或多个单词的名称重命名一组图像文件

该文本文件包含以下名称:

Achilles Reef , Island Emerald Falcon , Octopus Noelle Phoenix , Scribe Magenta Phoenix

我希望文件夹中的图像看起来像这样(无论它们的原始名称是什么random.jpg):

Achilles Reef.jpg
Island Emerald Falcon.jpg
Octopus Noelle Phoenix.jpg
Scribe Magenta Phoenix.jpg

答案1

您不需要将名称存储在单独的文件中...将它们作为数组元素存储在将重命名文件的 Bash 脚本文件中,如下所示:

#!/bin/bash

n=(
"Achilles Reef"
"Island Emerald Falcon"
"Octopus Noelle Phoenix"
"Scribe Magenta Phoenix"
)

i=0

for f in *.jpg
  do 
    (( "$i" < "${#n[@]}" )) && [ -f "$f" ] && mv -nv -- "$f" "${n[$i]}.jpg"
    ((i++))
  done

但是,如果您必须从文件中读取名称,则可以通过将解析的名称作为行传递来定义数组,readarray如下所示:

#!/bin/bash

readarray -t n < <(awk -F' , ' '{for (i=1; i<=NF; i++) print $i}' /path/to/file.txt)

i=0

for f in *.jpg
  do 
    (( "$i" < "${#n[@]}" )) && [ -f "$f" ] && mv -nv -- "$f" "${n[$i]}.jpg"
    ((i++))
  done

注意您必须准确使用字段分隔符,即将一个空格、一个逗号、另一个空格一起-F' , '视为字段分隔符。,,

参见此演示:

$ touch {1..4}.jpg
ubuntu@localhost:~/test$ LC_ALL=en_US ls -l
total 4
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 1.jpg
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 2.jpg
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 3.jpg
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 4.jpg
-rw-rw-r-- 1 ubuntu ubuntu 231 Jan  8 18:49 script.bash
ubuntu@localhost:~/test$ cat script.bash 
#!/bin/bash

n=(
"Achilles Reef"
"Island Emerald Falcon"
"Octopus Noelle Phoenix"
"Scribe Magenta Phoenix"
)

i=0

for f in *.jpg
  do 
    (( "$i" < "${#n[@]}" )) && [ -f "$f" ] && mv -nv -- "$f" "${n[$i]}.jpg"
    ((i++))
  done
ubuntu@localhost:~/test$ bash script.bash
renamed '1.jpg' -> 'Achilles Reef.jpg'
renamed '2.jpg' -> 'Island Emerald Falcon.jpg'
renamed '3.jpg' -> 'Octopus Noelle Phoenix.jpg'
renamed '4.jpg' -> 'Scribe Magenta Phoenix.jpg'
ubuntu@localhost:~/test$ LC_ALL=en_US ls -l
total 4
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 'Achilles Reef.jpg'
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 'Island Emerald Falcon.jpg'
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 'Octopus Noelle Phoenix.jpg'
-rw-rw-r-- 1 ubuntu ubuntu   0 Jan  8 18:50 'Scribe Magenta Phoenix.jpg'
-rw-rw-r-- 1 ubuntu ubuntu 231 Jan  8 18:49  script.bash

当然,您可以使脚本文件可执行chmod +x script.bash,然后使用绝对路径/full/path/to/script.bash或相对路径运行它./script.bash,或者您可以将其复制到搜索路径中的目录并作为命令运行它,例如...您也可以从包含这些图像文件的目录中运行它,或者在循环script.bash头部指定该目录的完整路径,然后您可以从文件系统层次结构中的任何位置运行该脚本。forfor f in /full/path/to/directory/*.jpg

相关内容