如何批量重命名x.txt为00x.txt

sh/bash/dash/ksh/zsh等Shell脚本
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

如何批量重命名x.txt为00x.txt

#1

帖子 trigger » 2010-06-27 11:55

代码: 全选

$ ls
100.txt  124.txt  148.txt  171.txt  195.txt  218.txt  241.txt  265.txt  289.txt  311.txt  335.txt  359.txt  382.txt  405.txt  54.txt  78.txt
101.txt  125.txt  149.txt  172.txt  196.txt  219.txt  242.txt  266.txt  28.txt   312.txt  336.txt  35.txt   383.txt  406.txt  55.txt  79.txt
102.txt  126.txt  14.txt   173.txt  197.txt  21.txt   243.txt  267.txt  290.txt  313.txt  337.txt  360.txt  384.txt  407.txt  56.txt  7.txt
103.txt  127.txt  150.txt  174.txt  198.txt  220.txt  244.txt  268.txt  291.txt  314.txt  338.txt  361.txt  385.txt  408.txt  57.txt  80.txt
104.txt  128.txt  151.txt  175.txt  199.txt  221.txt  245.txt  269.txt  292.txt  315.txt  339.txt  362.txt  386.txt  409.txt  58.txt  81.txt
105.txt  129.txt  152.txt  176.txt  19.txt   222.txt  246.txt  26.txt   293.txt  316.txt  33.txt   363.txt  387.txt  40.txt   59.txt  82.txt
106.txt  12.txt   153.txt  177.txt  1.txt    223.txt  247.txt  270.txt  294.txt  317.txt  340.txt  364.txt  388.txt  410.txt  5.txt   83.txt
107.txt  130.txt  154.txt  178.txt  200.txt  224.txt  248.txt  271.txt  295.txt  318.txt  341.txt  365.txt  389.txt  411.txt  60.txt  84.txt
108.txt  131.txt  155.txt  179.txt  201.txt  225.txt  249.txt  272.txt  296.txt  319.txt  342.txt  366.txt  38.txt   412.txt  61.txt  85.txt
109.txt  132.txt  156.txt  17.txt   202.txt  226.txt  24.txt   273.txt  297.txt  31.txt   343.txt  367.txt  390.txt  413.txt  62.txt  86.txt
10.txt   133.txt  157.txt  180.txt  203.txt  227.txt  250.txt  274.txt  298.txt  320.txt  344.txt  368.txt  391.txt  414.txt  63.txt  87.txt
110.txt  134.txt  158.txt  181.txt  204.txt  228.txt  251.txt  275.txt  299.txt  321.txt  345.txt  369.txt  392.txt  415.txt  64.txt  88.txt
111.txt  135.txt  159.txt  182.txt  205.txt  229.txt  252.txt  276.txt  29.txt   322.txt  346.txt  36.txt   393.txt  41.txt   65.txt  89.txt
112.txt  136.txt  15.txt   183.txt  206.txt  22.txt   253.txt  277.txt  2.txt    323.txt  347.txt  370.txt  394.txt  42.txt   66.txt  8.txt
113.txt  137.txt  160.txt  184.txt  207.txt  230.txt  254.txt  278.txt  300.txt  324.txt  348.txt  371.txt  395.txt  43.txt   67.txt  90.txt
114.txt  138.txt  161.txt  185.txt  208.txt  231.txt  255.txt  279.txt  301.txt  325.txt  349.txt  372.txt  396.txt  44.txt   68.txt  91.txt
115.txt  139.txt  162.txt  186.txt  209.txt  232.txt  256.txt  27.txt   302.txt  326.txt  34.txt   373.txt  397.txt  45.txt   69.txt  92.txt
116.txt  13.txt   163.txt  187.txt  20.txt   233.txt  257.txt  280.txt  303.txt  327.txt  350.txt  374.txt  398.txt  46.txt   6.txt   93.txt
117.txt  140.txt  164.txt  188.txt  210.txt  234.txt  258.txt  281.txt  304.txt  328.txt  351.txt  375.txt  399.txt  47.txt   70.txt  94.txt
118.txt  141.txt  165.txt  189.txt  211.txt  235.txt  259.txt  282.txt  305.txt  329.txt  352.txt  376.txt  39.txt   48.txt   71.txt  95.txt
119.txt  142.txt  166.txt  18.txt   212.txt  236.txt  25.txt   283.txt  306.txt  32.txt   353.txt  377.txt  3.txt    49.txt   72.txt  96.txt
11.txt   143.txt  167.txt  190.txt  213.txt  237.txt  260.txt  284.txt  307.txt  330.txt  354.txt  378.txt  400.txt  4.txt    73.txt  97.txt
120.txt  144.txt  168.txt  191.txt  214.txt  238.txt  261.txt  285.txt  308.txt  331.txt  355.txt  379.txt  401.txt  50.txt   74.txt  98.txt
121.txt  145.txt  169.txt  192.txt  215.txt  239.txt  262.txt  286.txt  309.txt  332.txt  356.txt  37.txt   402.txt  51.txt   75.txt  99.txt
122.txt  146.txt  16.txt   193.txt  216.txt  23.txt   263.txt  287.txt  30.txt   333.txt  357.txt  380.txt  403.txt  52.txt   76.txt  9.txt
123.txt  147.txt  170.txt  194.txt  217.txt  240.txt  264.txt  288.txt  310.txt  334.txt  358.txt  381.txt  404.txt  53.txt   77.txt
怎么把主文件名统一成3位,不足的前面补0?
类似:

代码: 全选

$ seq -w 1 100
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
Jarson
帖子: 2371
注册时间: 2008-07-21 9:44
来自: 深圳
联系:

Re: 如何批量重命名x.txt为00x.txt

#2

帖子 Jarson » 2010-06-27 12:03

代码: 全选

rename 's/^(\d\d\.txt)$/0$1/' *.txt
头像
冲浪板
论坛版主
帖子: 7513
注册时间: 2007-05-06 8:19

Re: 如何批量重命名x.txt为00x.txt

#3

帖子 冲浪板 » 2010-06-27 12:04

用命令吧,不是崇尚命令的嘛,别用鼠标点,效率不高,会被鄙视。
可是,你有工具的话不也是用鼠标来着?
纠结啊
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 如何批量重命名x.txt为00x.txt

#4

帖子 trigger » 2010-06-27 13:58

Jarson 写了:

代码: 全选

rename 's/^(\d\d\.txt)$/0$1/' *.txt
1~9还是原样。手动改倒是容易了。有一次性的办法不?更普适的,比如4位、6位的
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 如何批量重命名x.txt为00x.txt

#5

帖子 trigger » 2010-06-27 13:59

冲浪板 写了:用命令吧,不是崇尚命令的嘛,别用鼠标点,效率不高,会被鄙视。
可是,你有工具的话不也是用鼠标来着?
纠结啊
弟啊,错楼了吧。这个板块就是聊命令的。
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何批量重命名x.txt为00x.txt

#6

帖子 eexpress » 2010-06-27 15:17

应该用perl的printf
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何批量重命名x.txt为00x.txt

#7

帖子 eexpress » 2010-06-27 15:19

或者gprename
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 如何批量重命名x.txt为00x.txt

#8

帖子 xiooli » 2010-06-27 16:41

代码: 全选

for i in *txt; do j="`printf "%.3d" ${i/.txt}`".txt; [ $i != $j ] && mv $i $j; done 
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何批量重命名x.txt为00x.txt

#9

帖子 eexpress » 2010-06-27 17:48

不用printf,用正则的,就是找麻烦。
:em04
● 鸣学
头像
Jarson
帖子: 2371
注册时间: 2008-07-21 9:44
来自: 深圳
联系:

Re: 如何批量重命名x.txt为00x.txt

#10

帖子 Jarson » 2010-06-27 18:46

trigger 写了:
Jarson 写了:

代码: 全选

rename 's/^(\d\d\.txt)$/0$1/' *.txt
1~9还是原样。手动改倒是容易了。有一次性的办法不?更普适的,比如4位、6位的
一个\d表示一位数字,自己根据具体情况稍微修改一下正则表达式里面的小括号括住的部分就好。
更普适的正则表达式也就相应的复杂些,匹配的效率和准确率也许会降低。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何批量重命名x.txt为00x.txt

#11

帖子 aerofox » 2010-06-28 22:05

代码: 全选

for (( i=1; i<100; i++)); do
    ((j=i+1000))
    mv $i.txt ${j#1}.txt 
done
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 如何批量重命名x.txt为00x.txt

#12

帖子 trigger » 2010-06-29 9:57

自己写了一个,但是要执行两遍

代码: 全选

#!/bin/bash
for i in `ls | cut -f 1 -d"."`
do
 l=`expr length $i`
 if [ "$l" -ne "3" ];then
 mv ${i}".txt" "0"${i}".txt"
 fi
done
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 如何批量重命名x.txt为00x.txt

#13

帖子 trigger » 2010-06-29 10:06

我想知道怎么把字符串做乘法输出,比如3*"0"输出000
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 如何批量重命名x.txt为00x.txt

#14

帖子 trigger » 2010-06-29 10:21

eexpress 写了:或者gprename
原来gprename就是pyrenamer的perl实现啊。功能是一样的,界面都相似
附件
2010-06-29-102052_1139x513_scrot.png
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何批量重命名x.txt为00x.txt

#15

帖子 aerofox » 2010-06-29 12:18

再来一个:

代码: 全选

#!/bin/bash
for f in *.txt; do
    b=${f%.txt}
    if [ ${#b} -lt 3 ]; then
        n="00$b"
        n="${n:0-3}"    # 在原来的 basename ($b) 前加两个 0,再取末尾三个字符,作为新的 basename
        mv "$f" "$n.txt"
    fi
done
回复