【问题标题】:one liner shell script一个班轮外壳脚本
【发布时间】:2011-08-31 18:29:55
【问题描述】:

谁能告诉我一个命令,它可以在不使用管道和重定向的情况下将目录下的所有文件重命名为 test.c 为 test.cc。

我编写了一个包含循环并执行相同工作的 shell 脚本:

for i in *.c;
do
mv $i ${i%c}cc
done

【问题讨论】:

  • for i in *.c; do mv $i ${i%c}cc; done ?

标签: linux shell


【解决方案1】:
find dirname -iname "*.c" -exec mv "{}" "{}"c \;

【讨论】:

  • 你能告诉我如何使用上面的脚本将*.cc转换回*.c文件
  • 简而言之,你不能。不过,rename .cc .c *.cc 替代方案很简单(如果系统上有 rename)。
  • 你可以这样做:find x -iname "*.cc" -exec mv "{}" `basename "{}"`.c \; 但重命名解决方案好多更好。
  • 我认为上面的脚本不会起作用,因为你没有正确使用 basename 命令
  • 正确,那个脚本不好。使用rename,因为它适用于一般情况。
【解决方案2】:

有什么问题:

for i in *.c; do mv $i ${i%c}cc; done

只有一行 - 甚至不是很长的一行...

另外,在 Linux 上,有一个 rename 命令:

rename .c .cc *.c

【讨论】:

    【解决方案3】:

    mmv 应该可以解决问题。

    【讨论】:

      【解决方案4】:

      如果你有rename 命令:

      rename .c .cc *.c
      

      来自手册页:

      rename 命令是 util-linux-ng 软件包的一部分,是 来自ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多