如何在bash中修改文件名

时间:2014-03-12 17:32:53

标签: bash

我有一个目录,如:/data/work/files/

calldata_phonecalls_2131201401_01.zip calldata_phonecalls_7373201401_02.zip

在这个目录中,我想创建与zip文件相对应的新文件,但是在BASH中修改名称的一小部分:

calldata_calllog_2131201401_01.tsv calldata_calllog_7373201401_02.tsv

pl note“phonecalls”改为“calllog”

Pl帮助。

2 个答案:

答案 0 :(得分:4)

使用Shell Parameter Expansionbasename

for f in /data/work/files/*.zip; do
  mv "$f" "$(basename "${f/phonecalls/calllog}" .zip).tsv"
done

使用rename(perl发布的一部分):

rename 's/phonecalls/calllog/;s/\.zip$/.tsv/' /data/work/files/*.zip

答案 1 :(得分:1)

使用重命名:

使用一个版本的重命名:

rename 's/^fgh/jkl/' fgh*

使用其他版本的重命名:

rename fgh jkl fgh*

您应该查看平台的手册页,了解上述哪一项适用。

使用mv:

find ./ -name "*.xyz\[*\]" | while read line
do 
mv "$line" ${line%.*}.xyz
done

另一种方式

ls -1 | nawk '/foo-bar-/{old=$0;gsub(/-\(.*\)/,"",$0);system("mv \""old"\" "$0)}'

又一个:

for f in fgh*; do mv $f $(echo $f | sed 's/^fgh/jkl/g'); done

stackoverflow和超级用户页面下还有其他几个答案:

从以下链接复制/总结:

Rename multiple files in Unix

How to use mv command to rename multiple files in unix?