2012-01-16 127 views
3

重命名文件我有一个目录结构如下具有相同名称的目录名称

dir----| 
     | 
     |--dir1\ some\ thing--result.pdf 
     | 
     |--dir2\ some\ thing--result.pdf 
     | 
     |--dir3\ some\ thing--result.pdf 
     | 

每个子目录下的文件名是result.pdf。

作为目录dir1 dir2 dir3在其名称中有空格。 我不能理解的东西(我正在写一个bash脚本)如何在变量中使用这个目录名并重命名result.pdf

我想重命名这个文件中的每个result.pdf,其名称与目录相同name.pdf

#!/bin/bash 
    for i in *;do 
    cd $i 
    mv result.pd $i.pdf 
    cd .. 
    done 

目录名称中的空格正在产生问题。如何结束这个?

+0

第1步:找到。 -exec rename'' - {} \;第2步:赢利 –

回答

7

尝试引用名称:

for i in *; do 
    mv "$i/result.pdf" "$i/$i.pdf" 
done 
+0

哦!我吮吸打字! +1 –

+0

@ypons感谢你的方法,但我还不清楚为什么我们需要使用双引号。 –

+1

如果使用引号,那么包含在其中的字符串将作为一个参数赋予'mv'。所以'mv'知道它全部属于同一个文件名。否则,如果有空白,它将导致两个连续的参数为'mv',因此'mv'将空白的左右部分作为单独的文件名。如果使用单引号,那么引号内的内容不会被shell评估,所以$ i不会被展开,而是会保留$ i。这是单引号和双引号之间的区别。 – ypnos

0

这个怎么样班轮 -

for i in *; do mv "$i/result.pdf" "$i/$i.pdf" ; done