我有一个目录,如:/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帮助。
答案 0 :(得分:4)
使用Shell Parameter Expansion和basename
:
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和超级用户页面下还有其他几个答案:
从以下链接复制/总结: