使用文本列表批量重命名文件

使用文本列表批量重命名文件

假设我有一个包含大约 20 个文件的文件夹(比如,我在旅行中拍摄的照片),我想一次性重命名它们,但没有任何特定的 Perl 表达式我想使用(例如,如果我想在每个名称中添加不属于各个文件元数据的附加文本,如描述和/或评论)。

并且假设我可以更轻松地生成一个文本文件,其中包含我想要的每个文件的名称(或者,如果愿意的话,生成一个“前后”列表)。

有什么方法可以将该文本列表中隐含的更改应用到相关文件夹?

答案1

这看起来像是一份工作xargs

如果您的文件格式如下:

old_file1 new_file1
old_file2 new_file2

那么你就可以这样做xargs -a your_file -n 2 mv

答案2

1. 打开终端并将目录更改为工作目录(要重命名的文件所在的位置)。

2. 带有数字的文件名会改变顺序,因此,将 .ext 更改为您的扩展名(例如 .txt .pdf 等)后,运行以下代码用零填充文件名中的数字。

rename 's/\d+/sprintf("%04d",$&)/e' *.ext

3. 将包含新名称的列表文件放入顺序的顺序为带扩展名,作为主文件夹中的 file.list。例如。

newname file x.jpg
newname file y.jpg
newname file z.jpg

4. 将代码中的 .ext 更改为您的扩展名(例如 .txt .pdf 等)后,在终端中运行下面的代码。

rm ~/undo.sh; for old in *.ext; do read new;  mv -v "${old}" "${new}"; echo "mv" '"'$new'"' '"'$old'"' >> ~/undo.sh; chmod +x ~/undo.sh; done < ~/file.list

5. 如果需要,主文件夹中将创建一个 undo.sh 文件来撤消重命名。

6. 如果您不需要撤消文件,则以下代码就足够了。

for old in *.ext; do read new; mv -v "${old}" "${new}"; done < ~/file.list

相关内容