我需要将目录中以“.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
感谢您的帮助!!!
答案 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