Linux在特定位置批量重命名文件

Linux在特定位置批量重命名文件

我想重命名目录中特定位置的所有文件。

原始文件样本名称:

neif11_fastcredit_20190629101333.txt
neif11_fastcredit_20190629101334.txt
neif11_fastcredit_20190629101335.txt
neif11_fastcredit_20190629101336.txt
neif11_fastcredit_20190629101337.txt

我想将其重命名为:

neif11_fastcredit_20191129061333.txt
neif11_fastcredit_20191129061334.txt
neif11_fastcredit_20191129061335.txt
neif11_fastcredit_20191129061336.txt
neif11_fastcredit_20191129061337.txt

文件名理解:

neif11_fastcredit_2019应保持原样,下一部分是月份和日期[MMDD]0629我想更新为1129今天的日期和最后一部分是HHMMSS也保持不变。

由于我是 Linux 新手,需要帮助。

答案1

如果您没有rename可用的,您可以尝试使用以下(Bash)循环sed

user@host$ for FILE in *.txt; do NEWNAME=$(sed 's/_20190629/_20191129/' <<< "$FILE"); mv "$FILE" "$NEWNAME"; done

请注意,这需要 Bash。如果你有另一个外壳,你将不得不求助于类似的东西

user@host$ for FILE in *.txt; do NEWNAME=$(echo "$FILE" | sed 's/_20190629/_20191129/'); mv "$FILE" "$NEWNAME"; done

另请注意,这假设文件名“行为相当良好”,因此特殊字符(不是示例的一部分)可能会导致此失败。

答案2

拉里·沃尔的renamerename(Debian、Ubuntu)或prename(RHEL/CentOS)):

rename -n s/_20190629/_20191129/ neif11_fastcredit_20190629*.txt

-n只是“空运行”开关。-v实际使用时取下或更换。

答案3

使用mv和循环:

for f in neif11_fastcredit_20190629*.txt; do
  mv "$f" "neif11_fastcredit_201911${f##*_201906}"
done

该部分从每个文件名中${f##*_201906}删除最长的匹配前缀,并将该部分保留为新文件名的后缀。neif11_fastcredit_201906DDHHMMSS.txt

相关内容