我有一个有书籍的文件夹,我有一个文件,里面有每个文件的真实姓名。我以一种我很容易看到它们是否被命令的方式重命名它们,比如“00.pdf”,“01.pdf”等等。
我想知道是否有办法使用shell来匹配文件的每一行,比如说“names”,与每个文件匹配。实际上,请按照排序顺序将文件的行i
与位置i
中的图书进行匹配。
<name-of-the-book-in-the-1-line> -> <book-in-the-1-position>
<name-of-the-book-in-the-2-line> -> <book-in-the-2-position>
.
.
.
<name-of-the-book-in-the-i-line> -> <book-in-the-i-position>
.
.
.
我在Windows中使用Total Commander执行此操作,但我想在Ubuntu中执行此操作,因此我无需重新启动。
我知道mv
和rename
,但我对正则表达式的要求并不理想......
答案 0 :(得分:1)
renamer.sh:
#!/bin/bash
for i in `ls -v |grep -Ev '(renamer.sh|names.txt)'`; do
read name
mv "$i" "$name.pdf"
echo "$i" renamed to "$name.pdf"
done < names.txt
names.txt :(行数必须与编号文件的数量完全相等)
name of first book
second-great-book
...
说明:
ls -v
返回自然排序的文件列表出于测试目的,您可以注释掉mv
命令:
#mv "$i" "$name"
现在,只需运行脚本:
bash renamer.sh
答案 1 :(得分:1)
循环遍历names.txt
,根据计数器创建文件名(使用printf
填充到两位数,使用-v
分配给变量),然后使用{{1}重命名}。 mv
会增加下一个文件名的计数器。
((++i))