0

嗨,这是一个简单的问题,但目前我还没有找到解决方案..

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

所以从当前目录如果我去

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

我得到的目录名称叫做saylorem-ipsum-v1-3

但是目录名称将来可能会更改,但它是目录中唯一的目录:~/relevant.directory. contains.directory.name.i.want.to.change

如何以编程方式将其更改为特定名称,例如correct-files

我可以通过做类似的事情来正常做

 mv lorem-ipsum-v1-3 correct-files

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

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

4

3 回答 3

3

就像是:

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

只要只移动一个目录,就应该可以正常工作。

于 2012-11-12T09:43:45.670 回答
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}
于 2012-11-12T09:36:27.420 回答
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 的方法,因此您可以使用 xargs 而不是 while 循环,但这不是标准的(据我所知)
  • 未参数化
  • 如果有任何子目录,它将不起作用。find 命令上的深度参数(同样,AFAIK)不是标准的。它们在 GNU 版本上确实存在,但在 Solaris 上似乎没有
  • 应该是别人...
于 2012-11-12T09:37:10.973 回答