【问题标题】:find command to rename filesfind命令重命名文件
【发布时间】:2018-04-14 14:39:01
【问题描述】:

我创建了一个名称为大写字母的文件列表,并尝试将它们重命名为名称相同但使用小写字母的文件。因此,如果我有 20 个文件名,如 FILE1、FILE2、FILE3 等。我想将它们分别重命名为 file1、file2、file3 等。我正在执行以下命令

[root@host-1-1 files]# find . -name 'FILE*' -exec mv  {} `echo {} | tr [:upper:] [:lower:]` \;

但我从 mv 命令收到以下错误。有人可以告诉我我在这里缺少什么吗? mv: ‘./FILE1’ 和 ‘./FILE1’ 是同一个文件 mv: ‘./FILE2’ 和 ‘./FILE2’ 是同一个文件 mv: ‘./FILE3’ 和 ‘./FILE3’ 是同一个文件 mv: ‘./FILE4’ 和 ‘./FILE4’ 是同一个文件 mv: ‘./FILE5’ 和 ‘./FILE5’ 是同一个文件 mv: ‘./FILE6’ 和 ‘./FILE6’ 是同一个文件 mv: ‘./FILE7’ 和 ‘./FILE7’ 是同一个文件 mv: ‘./FILE8’ 和 ‘./FILE8’ 是同一个文件 mv: ‘./FILE9’ 和 ‘./FILE9’ 是同一个文件 mv: ‘./FILE10’ 和 ‘./FILE10’ 是同一个文件 mv: ‘./FILE11’ 和 ‘./FILE11’ 是同一个文件 mv: ‘./FILE12’ 和 ‘./FILE12’ 是同一个文件 mv: ‘./FILE13’ 和 ‘./FILE13’ 是同一个文件 mv: ‘./FILE14’ 和 ‘./FILE14’ 是同一个文件 mv: ‘./FILE16’ 和 ‘./FILE16’ 是同一个文件 mv: ‘./FILE18’ 和 ‘./FILE18’ 是同一个文件 mv: ‘./FILE20’ 和 ‘./FILE20’ 是同一个文件 mv:‘./FILE15’和‘./FILE15’是同一个文件 mv: ‘./FILE17’ 和 ‘./FILE17’ 是同一个文件 mv:‘./FILE19’和‘./FILE19’是同一个文件 [root@host-1-1 文件]#

PS:我已经使用了 for 循环并满足了我的要求。我正在努力理解 find 命令。

【问题讨论】:

  • 看起来你正在以 root 身份运行它;如您所知,您应该尽可能使用权限较低的帐户。

标签: linux shell find command


【解决方案1】:

YMMV,但我通常会使用rename 命令,因为它:

  • 很简单,
  • 有一个 “试运行” 选项 (-n)
  • 如果两个文件重命名为相同的输出文件,则不会破坏。

然后你的命令变成:

rename -n 'y/A-Z/a-z/' FILE*

链接到一些examplesman page

【讨论】:

  • 编辑我以前的喜欢。我在我的 CentOS 系统上尝试了重命名选项。无效的选项.. :(
  • 我认为它在 CentOS 上可能被称为 prename - 因为它真的是一个 Perl 脚本。
【解决方案2】:

这里的问题是命令替换首先发生:

`echo {} | tr [:upper:] [:lower:]`

保留 {} 作为名称以将其重命名。只有这样find -exec 才会将{} 替换为文件名,此时这是它正在填写的模板:

mv {} {}

当然,这会导致 mv ./FILE1 ./FILE1 给出您遇到的错误。

【讨论】:

  • 我会在 shell 中使用 for 循环,就像你在问题中所说的那样,你解决了它。
猜你喜欢
  • 2019-09-02
  • 1970-01-01
  • 2021-07-18
  • 2016-05-29
  • 2019-05-20
  • 1970-01-01
  • 2019-09-02
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多