【问题标题】:rename all files in folder to numbered list 1.jpg 2.jpg [closed]将文件夹中的所有文件重命名为编号列表 1.jpg 2.jpg [关闭]
【发布时间】:2013-09-08 17:53:55
【问题描述】:

我有一个充满图像的文件夹,其中包含几个不同的随机文件名来帮助组织我想要的混乱,在一个命令中将它们全部重命名为顺序,所以如果我有 100 个文件,它开始命名第一个文件file-1.jpg file-2.jpg 等。这可以在一个命令中实现吗?

【问题讨论】:

  • 写个shell脚本就行了
  • 如果我知道如何编写一个 shell 脚本来完成这个,我可能会这样做哈哈
  • 那么听起来是学习的好时机!
  • 尝试自己编写一些东西,如果不起作用,请将其带给我们以帮助您。您启动它,我们提供帮助。我们不是为你写的。向我们展示您尝试过的实际代码,然后我们可以从那里帮助您。如果您先自己尝试一下,您可能会非常接近答案。

标签: linux command-line


【解决方案1】:

我能想到的最简洁的命令行是

ls | cat -n | while read n f; do mv "$f" "file-$n.jpg"; done

ls 列出当前目录中的文件,cat -n 添加行号。 while 循环逐行读取生成的编号文件列表,将行号存储在变量 n 中,将文件名存储在变量 f 中并执行重命名。

【讨论】:

  • 谢谢!这应该被标记为答案
  • 小心,如果有一个名为“file-$n.jpg”的文件将被覆盖!因此,文件可能会丢失。
  • 使用“|”有什么区别和 ”;” ?还有如何填充 n 和 f ?我不明白这里的概念。
  • @Tak 您在询问 shell 脚本的基础知识。我想我无法用一条 SO 评论教你一门复杂的编程语言 :) 所以我请你先阅读一些 shell 脚本教程。
  • @SvenMarnach 你能给我一个链接吗? :)
【解决方案2】:

我能够通过编写 bash 脚本来解决我的问题

#!/bin/sh
num=1
for file in *.jpg; do
       mv "$file" "$(printf "%u" $num).jpg"
       let num=$num+1
done

【讨论】:

  • sh 没有let。它只花了我 2 个小时的工作时间。必须是#!/bin/bash
  • 对我来说也一样。我需要把#!/bin/bash
  • 会很安全,把mv改成cp,然后删除我们不需要的文件
猜你喜欢
  • 2017-09-30
  • 2013-02-02
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2012-09-19
  • 2017-10-25
相关资源
最近更新 更多