我创建了一个名称为大写字母的文件列表,并尝试将它们重命名为具有相同名称但小写字母的文件。所以,如果我有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命令中的理解。
答案 0 :(得分:0)
这里的问题是命令替换首先发生:
`echo {} | tr [:upper:] [:lower:]`
将{}作为名称重命名为。只有这样find -exec
才能用文件名替换{}
,此时这就是它填写的模板:
mv {} {}
当然,这会导致mv ./FILE1 ./FILE1
,从而导致您获得错误。
答案 1 :(得分:0)