如何使用bash脚本删除部分文件名

时间:2014-07-19 00:29:40

标签: sh rename file-extension

我需要将目录中以“.dat.txt”结尾的所有文件名(长度不一)重命名为“.txt”

INPUT:

  

FOO.dat.txt,FOO2.dat.txt,SPAM.dat.txt,SPAM_AND_EGGS.dat.txt

期望的输出:

  

FOO.txt,FOO2.txt,SPAM.txt,SPAM_AND_EGGS.txt

一直试图使用“重命名”,但我以前从未使用过这种情况。

for f in DIRECTORY'/'*.dat.txt
    do
        rename 's/*.dat.txt/*.txt' *
    done

感谢您的帮助!!!

3 个答案:

答案 0 :(得分:2)

这应该有效:

for old in FOO*.dat.txt
do
new=$(echo $old | sed 's/.dat.txt/.txt/g')
mv "$old" "$new"
done

答案 1 :(得分:2)

假设你安装了util-linux软件包的重命名程序:

rename .dat.txt .txt *.dat.txt

但我认为您可能会使用perl版本:

rename 's/\.dat\.txt/\.txt/' *.dat.txt

有关这两个版本的简要摘要,请参阅this Linux Questions wiki page

答案 2 :(得分:1)

for i in FOO*dat.txt; do mv "$i" "${i%%dat.txt}txt"; done

使用bash参数扩展:http://wiki.bash-hackers.org/syntax/pe#substring_removal

或许更优雅:

for i in *dat.txt; do mv "$i" "${i/dat.txt/txt}"; done