find命令重命名文件

时间:2017-11-02 06:40:21

标签: linux shell find command

我创建了一个名称为大写字母的文件列表,并尝试将它们重命名为具有相同名称但小写字母的文件。所以,如果我有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:我已经用过循环并满足了我的要求。我正在研究find命令中的理解。

2 个答案:

答案 0 :(得分:0)

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

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

将{}作为名称重命名为。只有这样find -exec才能用文件名替换{},此时这就是它填写的模板:

mv {} {}

当然,这会导致mv ./FILE1 ./FILE1,从而导致您获得错误。

答案 1 :(得分:0)

YMMV,但我通常会找到rename命令,因为它:

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

然后您的命令变为:

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

链接到某些examplesman page