我的目录有很多名为“20130101_temp.txt”,“20130102_temp.txt”等的文件。
如何删除所有这些文件名称中的“_temp”。即,将20130101_temp.txt重命名为20130101.txt。
答案 0 :(得分:7)
使用bash:
for x in *_temp.txt
do
mv $x ${x%%_temp.txt}.txt
done
Perl(至少在Ubuntu上)还有一个名为rename
的实用程序,它带有一个正则表达式,所以你可以用以下内容完成同样的事情:
rename -n 's/_temp\.txt$/.txt/' *_temp.txt
-n
选项启动“干运行”,只会显示要重命名的内容。删除它以实际执行重命名。
答案 1 :(得分:3)
使用带有glob的for
循环来查找文件,使用parameter substitution删除要移动的_temp
:
for t in ????????_temp.txt; do
echo mv ${t} ${t/_temp/}
done
当您测试输出在系统上正确时,请删除echo
。
答案 2 :(得分:1)
尝试这样的事情:
for FILENAME in *_temp.txt; do
mv $FILENAME `echo $FILENAME | sed -e 's/_temp//'`
done
通常最好先将mv
替换为echo
进行试用。
答案 3 :(得分:0)
这不是一个bash解决方案,但由于我经常重复命名任务而懒惰地想到一个合理的bash解决方案,我只是得到了pyRenamer,一个GUI工具可以很好地完成这样的事情。它通常可以从标准存储库安装。
dlundquists解决方案虽然运作良好。
答案 4 :(得分:0)
这对我有用:
find . -depth -name '*_temp*' -execdir bash -c 'for f; do mv -i "$f" "${f//_temp/ }"; done' bash {} +