使用Ruby重命名所有子目录

巴里

我在Windows 7计算机上有一个深层嵌套的文件夹结构。Windows拒绝删除目录,因为它们的名称太长。我想将所有子文件夹重命名为类似2的名称,希望它足够短以至于可以删除。这是我的脚本:

@count = 0

Dir.glob("**/*") do |file|  #find src files in current folder and all subfolders
  if File.directory?(file)
    File.rename(file, File.dirname(file) + File::SEPARATOR + "2")
    @count += 1
  end
end

puts @count

当脚本运行时,它没有更改所有子目录的名称,而是更改了一个子目录,每次都逐渐更深一层。即,此刻运行脚本的输出为:

C:\>renamer.rb
30
C:\>renamer.rb
31
C:\>renamer.rb
32

我对为什么会这样感到困惑,不胜感激。

我是否采用正确的方法?我认为Ruby的递归目录删除方法会失败。但是,当我尝试执行

require "FileUtils"
FileUtils.remove_dir ("2", force = true)

我得到了错误

syntax error, unexpected ',', expecting ')'
FileUtils.remove_dir ("2", force = true)
                          ^
syntax error, unexpected ')', expecting end-of-input
FileUtils.remove_dir ("2", force = true)
                                    ^
米沙

问题是Dir.glob("**/*")返回这样的数组:

['folder', 'folder/sub', 'folder/sub/sub']

现在,当您执行以下操作时:

File.rename(file, File.dirname(file) + File::SEPARATOR + "2")

它将重命名folder,但是到达后folder/sub,该名称将不再存在,因为您已将其重命名folder2:它将2/sub代替folder/sub解决方案是反转阵列。这将从最深层次开始重命名过程,并一直进行到最高层次:

Dir.glob("**/*").reverse.each do |file|
  # rest of your code can stay the same
end

至于您的第二个问题,而不是:

FileUtils.remove_dir ("2", force = true)

您应该使用:

FileUtils.remove_dir("2", true)

首先,请确保之间没有空格这就是导致错误的原因。remove_dir(

也是force参数的名称,默认情况下为false这就是为什么您force = false 在API中看到的原因如果您想force成为true,则可以简单地传递true给该函数,就像我上面显示的那样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重命名csh shell中的所有子目录

来自分类Dev

重命名子目录中的所有文件

来自分类Dev

重命名不同子目录中的所有文件

来自分类Dev

从所有子目录移动特定文件,并根据子目录重命名

来自分类Dev

PHP使用子目录作为新文件名重命名所有文件

来自分类Dev

重命名Linux目录和子目录中的所有文件

来自分类Dev

如何重命名(取消隐藏)目录中的所有文件和子目录?

来自分类Dev

解压子目录中的所有文件,并在其原始目录后重命名

来自分类Dev

重命名目录和子目录中的所有文件

来自分类Dev

重命名所有子目录中的文件和文件夹以删除字符

来自分类Dev

批量重命名子目录的所有 gif 文件 rename() php

来自分类Dev

python重命名子目录中的所有文件

来自分类Dev

截断和重命名目录中的子目录

来自分类Dev

Windows批处理方式以单个文件替换子目录中的所有文件(复制,重命名所有文件)

来自分类Dev

带有文件重命名的Unix2Dos子目录

来自分类Dev

将子目录中的pdf文件重命名为子目录的名称

来自分类Dev

Gulp:使用**观看所有子目录

来自分类Dev

基于.xlsx的子目录中文件的批量重命名

来自分类Dev

无法重命名已安装的Pendrive的子目录

来自分类Dev

将文件重命名为子目录

来自分类Dev

重命名多个子目录中的同名文件

来自分类Dev

使用子目录中的计数器重命名文件

来自分类Dev

如何在子目录上使用命令“重命名”

来自分类Dev

遍历子目录,并将给定扩展名的所有文件重命名为相同的文件名

来自分类Dev

遍历子目录,并将给定扩展名的所有文件重命名为相同的文件名

来自分类Dev

CMD迭代并递归重命名所有文件名,并将当前子目录文件夹追加到当前文件名

来自分类Dev

重命名父目录时不重命名子目录

来自分类Dev

从所有子目录安装软件

来自分类Dev

如何使用vim打开当前目录和所有子目录中的所有文件?

Related 相关文章

  1. 1

    重命名csh shell中的所有子目录

  2. 2

    重命名子目录中的所有文件

  3. 3

    重命名不同子目录中的所有文件

  4. 4

    从所有子目录移动特定文件,并根据子目录重命名

  5. 5

    PHP使用子目录作为新文件名重命名所有文件

  6. 6

    重命名Linux目录和子目录中的所有文件

  7. 7

    如何重命名(取消隐藏)目录中的所有文件和子目录?

  8. 8

    解压子目录中的所有文件,并在其原始目录后重命名

  9. 9

    重命名目录和子目录中的所有文件

  10. 10

    重命名所有子目录中的文件和文件夹以删除字符

  11. 11

    批量重命名子目录的所有 gif 文件 rename() php

  12. 12

    python重命名子目录中的所有文件

  13. 13

    截断和重命名目录中的子目录

  14. 14

    Windows批处理方式以单个文件替换子目录中的所有文件(复制,重命名所有文件)

  15. 15

    带有文件重命名的Unix2Dos子目录

  16. 16

    将子目录中的pdf文件重命名为子目录的名称

  17. 17

    Gulp:使用**观看所有子目录

  18. 18

    基于.xlsx的子目录中文件的批量重命名

  19. 19

    无法重命名已安装的Pendrive的子目录

  20. 20

    将文件重命名为子目录

  21. 21

    重命名多个子目录中的同名文件

  22. 22

    使用子目录中的计数器重命名文件

  23. 23

    如何在子目录上使用命令“重命名”

  24. 24

    遍历子目录,并将给定扩展名的所有文件重命名为相同的文件名

  25. 25

    遍历子目录,并将给定扩展名的所有文件重命名为相同的文件名

  26. 26

    CMD迭代并递归重命名所有文件名,并将当前子目录文件夹追加到当前文件名

  27. 27

    重命名父目录时不重命名子目录

  28. 28

    从所有子目录安装软件

  29. 29

    如何使用vim打开当前目录和所有子目录中的所有文件?

热门标签

归档