rename命令不会用
Tofloor
poster avatar
s1124yy
deepin
2017-08-28 01:43
Author
我想在Deepin系统下批量的修改文件名,百度了下,可以用rename,但是网上的命令我用了,说我有语法错误,具体是这样的,我想把10.in 改为 1234.in  就出现了这种情况:



zmy@zmy-PC:~/Desktop/A(副本)$ rename 10.in 1234.in 10.in
Bareword found where operator expected at (eval 5) line 1, near "#line 1
10.in"
        (Missing operator before in?)
syntax error at (user-supplied code) line 3, near "10.in"


之后我还找了rename命令在哪里,是这样的:

zmy@zmy-PC:~/Desktop/A(副本)$ whereis rename
rename: /usr/bin/rename /usr/bin/rename.ul /usr/share/man/man1/rename.1.gz
zmy@zmy-PC:~/Desktop/A(副本)$ which rename
/usr/bin/rename


1. 我想问那个语法错误怎么解决?
2. 我就是想把  .sol 的文件 都改成  .out  命令该怎么写?

Reply Favorite View the author
All Replies
avatar
134******40
deepin
2017-08-28 01:59
#1
sudo apt install rename安装新的rename工具,老的工具已经不推荐使用而且失效了。
Reply View the author
avatar
s1124yy
deepin
2017-08-28 02:07
#2
https://bbs.deepin.org/post/144725
sudo apt install rename安装新的rename工具,老的工具已经不推荐使用而且失效了。 ...

我安装过了  就是这样。。。
Reply View the author
avatar
134******40
deepin
2017-08-28 02:07
#3
如果rename可以使用,可以这样使用这个命令
  1. rename "s/.sol/.out/" *
Copy the Code
Reply View the author
avatar
s1124yy
deepin
2017-08-28 02:10
#4
https://bbs.deepin.org/post/144725
sudo apt install rename安装新的rename工具,老的工具已经不推荐使用而且失效了。 ...

root@zmy-PC:/home/zmy/Desktop/A(副本)# apt install rename
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
rename 已经是最新版 (0.20-4)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
Reply View the author
avatar
s1124yy
deepin
2017-08-28 02:11
#5
https://bbs.deepin.org/post/144725
如果rename可以使用,可以这样使用这个命令

真的可以  你这个代码我刚试   已经成功了
Reply View the author
avatar
s1124yy
deepin
2017-08-28 02:13
#6
https://bbs.deepin.org/post/144725
如果rename可以使用,可以这样使用这个命令

但是我想知道这个代码的原理   能解释一下吗?  还有可以告诉我一下  我上面自己写的那个命令为什么报错了吗?
Reply View the author
avatar
134******40
deepin
2017-08-28 02:24
#7
https://bbs.deepin.org/post/144725
但是我想知道这个代码的原理   能解释一下吗?  还有可以告诉我一下  我上面自己写的那个命令为什么报错 ...

s表示使用的sed语法,而.sol被替换为为.out, 而“*”代表当前目录下的所有文件。
Reply View the author
avatar
woodelf
deepin
2017-08-28 02:27
#8
“s/foo/bar"表示在当前目录搜索foo,并将其替换为bar。
那一条命令等价于:
  1. $ rename .sol .out *.sol
Copy the Code

jdocker有一点说得不太对,rename命令有两个版本,一般我们用的都是util-linux包里面的C语言版本rename,单独安装的那个rename是perl版本,两者有点区别。







    来自:Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0  (zh-CN)
    ——2017/8/27 下午6:27:36
    Reply View the author
    avatar
    s1124yy
    deepin
    2017-08-28 02:31
    #9
    https://bbs.deepin.org/post/144725
    s表示使用的sed语法,而.sol被替换为为.out, 而“*”代表当前目录下的所有文件。 ...

    嗯 好的  真的谢谢你  我找到了一个参考 是 http://man.linuxde.net/rename  之后觉得该学一下正则了  已经解决了我的问题
    Reply View the author
    avatar
    s1124yy
    deepin
    2017-08-28 02:33
    #10
    https://bbs.deepin.org/post/144725
    “s/foo/bar"表示在当前目录搜索foo,并将其替换为bar。
    那一条命令等价于:

    谢谢你的回复,我前几次就试的这种,总是报语法错误,之后我也查了一下,确实是2个版本,但是我的电脑应该不是c版本的  是prel版本的  所以用jdocker 的方法就可以了
    Reply View the author
    avatar
    s1124yy
    deepin
    2017-08-28 02:34
    #11
    https://bbs.deepin.org/post/144725
    “s/foo/bar"表示在当前目录搜索foo,并将其替换为bar。
    那一条命令等价于:

    就是报的这种语法错误:

    zmy@zmy-PC:~/Desktop/A$ rename .sol .out *.sol
    syntax error at (user-supplied code), near "."
    Reply View the author
    avatar
    woodelf
    deepin
    2017-08-28 02:40
    #12
    https://bbs.deepin.org/post/144725
    就是报的这种语法错误:

    zmy@zmy-PC:~/Desktop/A$ rename .sol .out *.sol

    因为你系统里面的rename已经被perl版本的rename替换了,这个语法仅适用于C版本的rename。
    PS:C版本的rename不支持正则表达式,用perl版本会更方便。







      来自:Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0  (zh-CN)
      ——2017/8/27 下午6:40:35
      Reply View the author