【问题标题】:renaming file with same name as directory name重命名与目录名称相同的文件
【发布时间】:2012-01-16 21:03:53
【问题描述】:

我的目录结构如下

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

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

目录 dir1 dir2 dir3 的名称中有空格。 我无法理解的内容(我正在编写一个 bash 脚本)如何在变量中获取此目录名称并重命名 result.pdf

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

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

目录名称中的空格会造成问题。如何解决这个问题?

【问题讨论】:

  • 第一步:找到 . -exec 重命名 ' ' - {} \;第二步:盈利

标签: bash shell scripting


【解决方案1】:

尝试引用名称:

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

【讨论】:

  • @ypons 感谢您的方法有效,但我还不清楚为什么我们需要使用双引号。
  • 如果使用引号,则包含在引号中的字符串将作为一个参数提供给'mv'。所以'mv' 知道它都属于同一个文件名。否则,如果有空格,将导致 'mv' 的两个连续参数,因此 'mv' 将空格的左右部分作为单独的文件名。如果您使用单引号,则引号内的内容不会由 shell 评估,因此 $i 不会被扩展,而是保持 $i。这就是单引号和双引号的区别。
【解决方案2】:

这个单线怎么样 -

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多