2012-11-12 150 views
0

你好,这是一个简单的问题,但解决的办法躲开我的那一刻..Unix命令来更改目录名称

我可以找出我要改变名称的文件夹名称,我知道命令更改文件夹的名称是mv

所以从当前目录,如果我去

ls ~/relevant.directory.containing.directory.name.i.want.to.change 

,而我得到的目录的名称叫做说lorem-ipsum-v1-3

但目录名称可能会改变未来,但它是在目录中唯一的目录: 〜/ relevant.directory.containing.directory.name.i.want.to.change

如何以编程方式改变它像correct-files

一个特定的名字,我可以通过只是在做类似

mv lorem-ipsum-v1-3 correct-files 

做正常,但我要开始自动化,这样我就不需要继续复制和粘贴的目录名...

任何帮助,将不胜感激......

回答

3

喜欢的东西:

find . -depth -maxdepth 1 -type d | head -n 1 | xargs -I '{}' mv '{}' correct-files 

应该做工精细,只要只有一个目录应该被移动。

+0

不错。不知道xargs的-I参数。在所有版本的Unix上不存在find-maxdepth。 –

2

如果你是绝对肯定的是,relevant.directory.containing.directory.name.i.want.to.change只包含要重命名的目录,然后你可以简单地使用通配符:

mv ~/relevant.directory.containing.directory.name.i.want.to.change/*/ ~/relevant.directory.containing.directory.name.i.want.to.change/correct-files 

这也可以被进一步简化,使用bash括号扩展,以:

mv ~/relevant.directory.containing.directory.name.i.want.to.change/{*/,correct-files} 
1
cd ~/relevant.directory.containing.directory.name.i.want.to.change 
find . -type d -print | while read a ; 
do 
    mv $a correct-files ; 
done 

注意事项:

  • 没有错误处理
  • 有可能是反转的参数的MV,所以你可以用它代替while循环xargs的的一种方式,但是这不是标准(据我所知)
  • 没有参数化
  • 如果有任何子目录,它将无法工作。 find命令的深度参数(再一次,AFAIK)不是标准的。他们在GNU版本存在,但似乎缺少在Solaris
  • 也许别人...
+0

这是行不通的,因为'find'也会返回根目录:〜/ relevant.directory.containing.directory.name.i.want.to.change – dogbane

+0

@dogbane你说得对。固定。还增加了另一个缺陷(!)。 –