用bash重命名文件

时间:2013-01-17 00:40:09

标签: bash

我的目录有很多名为“20130101_temp.txt”,“20130102_temp.txt”等的文件。

如何删除所有这些文件名称中的“_temp”。即,将20130101_temp.txt重命名为20130101.txt。

5 个答案:

答案 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 {} +