使用文本文件重命名文件夹中的批处理文件

问题描述 投票:0回答:1

我有一个以特定字符串开头的文件的文件夹,并希望使用文本文件中的相应列替换部分字符串

带文件的文件夹

 ABC_S1_002.txt
 ABC_S1_003.html
 ABC_S1_007.png
 NMC_D1_002.png
 NMC_D2_003.html

而且我有一个文本文件,其中的字符串将替换为:

ABC ABC_newfiles
NMC NMC_extra

因此重命名后的文件夹将为

 ABC_newfiles_S1_002.txt
 ABC_newfiles_S1_003.html
 ABC_newfiles_S1_007.png
 NMC_extra_D1_002.png
 NMC_extra_D2_003.html

我尝试使用mv逐个文件

for f in ABC*; do mv "$f" "${f/ABC/ABC_newfiles}"; done

如何读取第一列中包含旧字符串的文本文件,并用第二列中的新字符串替换?我尝试过

IFS=$'\n'; for i in $(cat file_rename);do oldName=$(echo $i | cut -d $'\t' -f1);  newName=$(echo $i | cut -d $'\t' -f2); for f in oldName*; do mv "$f" "${f/oldName/newName}"; done ; done

虽然没有用。

sed rename file-rename batch-rename mv
1个回答
0
投票

查看结果

sed -r 's#([^ ]*) (.*)#for f in \1*; do mv "$f" "${f/\1/\2}"; done#' textfile

看起来不错时,您可以复制粘贴结果或将其包装在source中:

source <(sed -r 's#([^ ]*) (.*)#for f in \1*; do mv "$f" "${f/\1/\2}"; done#' textfile)
© www.soinside.com 2019 - 2024. All rights reserved.