我对这个 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
语句显示正确/预期的脚本操作。