c shell脚本:找到目录并重命名

c shell脚本:找到目录并重命名

我对这个 shell 脚本还是新手。我有一项交给我的任务,但我很难执行它。任务是我有很多基于 ddmmyy 的目录。

03Mar2014  08Aug2013  11Jan2015  16Jan2014  22Feb2014  26Mar2014  
03Nov2013  08Jan2014  11Jul2013  16Jul2013  22Jul2013  26Oct2014  
03Oct2013  08Jan2015  11Nov2014  16May2014  22Mar2014  26Sep2013  

任务是将目录制作为mmyy。

到目前为止,我的代码是

foreach file(`find . -type d | awk -F/ 'NF == 3'`) 
echo $file
set newmove = `echo $file | cut -c 1-2,5-`
echo $newmove
mv $file $newmove

output:
for find . -type d | awk -F/ 'NF == 3':
./24Jan2015/W51A
`echo $file | cut -c 1-2,5-`
./Jan2015/W51A
mv $file $newmove
mv: cannot rename ./24Jan2015/W51A to   ./Jan2015/W51A: No such file or directory

但脚本不起作用。你们知道如何做到这一点吗?

答案1

首先注意:您的示例显示的文件ddmmyy格式为(在同一目录中),而不是dd/mm/yy.如果确实如此,您find . -type d | awk -F/ 'NF == 3'将找不到它们,因此foreach会因空的参数列表而抱怨:

> foreach ( '' )
foreach: Variable name must begin with a letter.

第二个注意事项:假设您找到文件,您的cut语句并不能完全获得正确的相应目标目录(无论哪个ddmmyy或是dd/mm/yy正确的文件名格式):

> echo '08Aug2013' | cut -c 1-2,5-
08g2013
> echo '08/Aug/2013' | cut -c 1-2,5-
08ug/2013

您的echo陈述应该指出您的脚本没有完成预期的工作。

单独尝试每一段代码以确保它达到预期的效果通常是调试脚本的一个很好的起点。从头开始,用find . -type d.注释掉该move语句,直到该echo语句显示正确/预期的脚本操作。

相关内容