我想重命名目录中特定位置的所有文件。
原始文件样本名称:
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
和拉里·沃尔的rename
(rename
(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_201906
DDHHMMSS.txt