如 test_20120205_1230.txt
test_20120210_0130.txt
后一个文件较新,最后是要取到test_20120210_0130.txt文件把他改名成test_20120210_0130.dat
谢谢
11 个解决方案
#1
1.先按照原始文件名的第二,三个部分排序:
ll *.txt | sort -t'_' -k2,3 #把文件名用'_'分隔成3部分,以第2,3部分排序
2.取最后一个文件(也就是最新的文件)
ll *.txt | sort -t'_' -k2,3 | tail -1 #这里tail -1取ll结果集中最后一个文件
3.然后用mv改名就可以了
ll *.txt | sort -t'_' -k2,3 #把文件名用'_'分隔成3部分,以第2,3部分排序
2.取最后一个文件(也就是最新的文件)
ll *.txt | sort -t'_' -k2,3 | tail -1 #这里tail -1取ll结果集中最后一个文件
3.然后用mv改名就可以了
#2
rename
#3
ls -tr | xargs rename txt dat
#4
ls -tr | tail -1 | xargs rename txt dat
#5
楼上的在我的机器上没有执行成功,写了个化简单为复杂的, 有简单实现的还请指教~
ls | awk -F. '{j[m++] = $1}END{for(m in j)print j[m]}' | awk -F_ '{a[i++] = $2$3; n[k++]=0}{for(i in a){if(n[k++]<a[i])n[k]=a[i]}}END{printf "%s.txt", $j[k]}' | xargs rename "s/.txt/.dat/"
ls | awk -F. '{j[m++] = $1}END{for(m in j)print j[m]}' | awk -F_ '{a[i++] = $2$3; n[k++]=0}{for(i in a){if(n[k++]<a[i])n[k]=a[i]}}END{printf "%s.txt", $j[k]}' | xargs rename "s/.txt/.dat/"
#6
这样呢?
ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
#7
ls | sort -n | tail -n 1 | rename "s/.txt/.dat/"
这样在我的机器上是可以的。怎么感觉我们的机器差别很大。U 11.10
这样在我的机器上是可以的。怎么感觉我们的机器差别很大。U 11.10
#8
谢谢各位,我试了 ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh 可以。 现在有个追加问题,如果目录下有.txt还有.csv,我想找的最新文件只有.txt怎么办。就是说如果有个.csv文件是最新文件,我要忽略它。谢谢。
#9
ls -tr *.txt | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
#10
还有,我发现我的机器所有rename都用不了。
#11
我先结贴了,待会儿再发个帖子。
#1
1.先按照原始文件名的第二,三个部分排序:
ll *.txt | sort -t'_' -k2,3 #把文件名用'_'分隔成3部分,以第2,3部分排序
2.取最后一个文件(也就是最新的文件)
ll *.txt | sort -t'_' -k2,3 | tail -1 #这里tail -1取ll结果集中最后一个文件
3.然后用mv改名就可以了
ll *.txt | sort -t'_' -k2,3 #把文件名用'_'分隔成3部分,以第2,3部分排序
2.取最后一个文件(也就是最新的文件)
ll *.txt | sort -t'_' -k2,3 | tail -1 #这里tail -1取ll结果集中最后一个文件
3.然后用mv改名就可以了
#2
rename
#3
ls -tr | xargs rename txt dat
#4
ls -tr | tail -1 | xargs rename txt dat
#5
楼上的在我的机器上没有执行成功,写了个化简单为复杂的, 有简单实现的还请指教~
ls | awk -F. '{j[m++] = $1}END{for(m in j)print j[m]}' | awk -F_ '{a[i++] = $2$3; n[k++]=0}{for(i in a){if(n[k++]<a[i])n[k]=a[i]}}END{printf "%s.txt", $j[k]}' | xargs rename "s/.txt/.dat/"
ls | awk -F. '{j[m++] = $1}END{for(m in j)print j[m]}' | awk -F_ '{a[i++] = $2$3; n[k++]=0}{for(i in a){if(n[k++]<a[i])n[k]=a[i]}}END{printf "%s.txt", $j[k]}' | xargs rename "s/.txt/.dat/"
#6
这样呢?
ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
#7
ls | sort -n | tail -n 1 | rename "s/.txt/.dat/"
这样在我的机器上是可以的。怎么感觉我们的机器差别很大。U 11.10
这样在我的机器上是可以的。怎么感觉我们的机器差别很大。U 11.10
#8
谢谢各位,我试了 ls -tr | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh 可以。 现在有个追加问题,如果目录下有.txt还有.csv,我想找的最新文件只有.txt怎么办。就是说如果有个.csv文件是最新文件,我要忽略它。谢谢。
#9
ls -tr *.txt | tail -1 | awk '{b=$0;sub(".txt", ".dat",b);print "mv",$0,b}' | sh
#10
还有,我发现我的机器所有rename都用不了。
#11
我先结贴了,待会儿再发个帖子。