该文本文件包含以下名称:
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
头部指定该目录的完整路径,然后您可以从文件系统层次结构中的任何位置运行该脚本。for
for f in /full/path/to/directory/*.jpg