如何使用Ruby根据原始目录复制文件并重命名它们?

鲁弗斯

我有许多目录,其中包含通用名称的txt文件。我要复制txt文件,然后根据每个文件的包含目录重命名它们,然后将它们移到父目录(该目录是存放原始txt文件的目录,在脚本中指定为“ txts”以下)。我也想在其原始目录中保留具有原始名称的原始txt文件,以便原始目录中的任何内容都不会更改。

我有一个旧脚本,我认为曾经达到(某些)目标,也许是移动而不是复制原始txt文件,但现在无法成功运行它:

require 'find'
require 'fileutils'

Find.find("txts") do |path|
  if FileTest.directory?(path)
    next
  end

  ret = path.scan(/.*txts\/([^\/]+)\/.*/)
  name = ret[0].to_s + ".txt"
  FileUtils.mv(path, name)
end

几年前,一个朋友写了这篇文章,并在Unix环境中成功运行了它。现在运行它时,会返回大量错误。我使用的是Ruby 2.2.2,这完全有可能是我不太熟悉的某个占位符,或者是与旧版本的FileUtils有所不同的地方……我真的不知道,而且恐怕我已经我的新手技能无法解决任何问题。

所以我呼吁你...

编辑:这是错误消息:

C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1328:in `stat': Invalid argument @ rb_file
_s_stat - ["may2013"].txt (Errno::EINVAL)
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1328:in `lstat'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1247:in `exist?'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:519:in `block in mv'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1570:in `block in fu_each_src
_dest'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1586:in `fu_each_src_dest0'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1568:in `fu_each_src_dest'
        from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:516:in `mv'
        from extracttxt.rb:12:in `block in <main>'
        from C:/Ruby22/lib/ruby/2.2.0/find.rb:48:in `block (2 levels) in find'
        from C:/Ruby22/lib/ruby/2.2.0/find.rb:47:in `catch'
        from C:/Ruby22/lib/ruby/2.2.0/find.rb:47:in `block in find'
        from C:/Ruby22/lib/ruby/2.2.0/find.rb:42:in `each'
        from C:/Ruby22/lib/ruby/2.2.0/find.rb:42:in `find'
        from extracttxt.rb:6:in `<main>'
乔丹跑步

错误消息显示ret[0]为数组[ "may13" ],因此ret[0].to_s + ".txt"求值为字符串["may13"].txt我不确定,但是String#scan在Ruby 1.9或2.0中可能会发生更改的行为,因此当存在捕获时,它会返回数组数组,而在返回字符串数组之前会返回数组数组。

这样的事情应该可以解决这个问题:

require 'find'
require 'fileutils'

Find.find("txts") do |path|
  if FileTest.directory?(path)
    next
  end

  if path =~ %r{txts/([^/]+)/}
    FileUtils.cp(path, "#{$1}.txt")
  end
end

如果要按文件扩展名进行匹配,则可以将其添加到上述Regexp中(例如%r{txts/([^/]+)/.+\.txt$}),也可以使用Dir[](aka Dir.glob)例如:

require 'dir'
require 'fileutils'

Dir['txts/**/*.txt'].each do |path|
  next if FileTest.directory?(path) ||
  next unless path =~ %r{txts/([^/]+)/}

  FileUtils.cp(path, "#{$1}.txt")
end

我不知道是否会有任何性能差异,但是可能值得尝试。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据原始文件的更改重命名复制目录中的文件和子目录?

来自分类Dev

Powershell:根据目录名查找文件,复制并重命名到同一文件夹并保持原始

来自分类Dev

复制文件并重命名

来自分类Dev

复制并重命名文件

来自分类Dev

如何根据目录和子目录中的txt文件复制和重命名文件

来自分类Dev

复制并重命名多个目录

来自分类Dev

复制并重命名目录

来自分类Dev

DELPHI如何复制.txt文件并重命名

来自分类Dev

使用vbs复制并重命名最旧的文件

来自分类Dev

外壳移动文件并重命名它们

来自分类Dev

Gulp-复制并重命名文件

来自分类Dev

复制文件并重命名-Gradle

来自分类Dev

使用Ruby在ftp站点上移动并重命名文件

来自分类Dev

使用Ruby在ftp站点上移动并重命名文件

来自分类Dev

将文件复制到子目录并重命名

来自分类Dev

Bash命令可以在多个目录中复制并重命名相同的文件名?

来自分类Dev

如何在同一命令中复制目录并重命名?

来自分类Dev

如何使用 Python 复制和重命名目录中的所有文件?

来自分类Dev

如何使用 Gradle Copy 任务重命名我正在复制的文件路径上的目录?

来自分类Dev

根据文件的父目录重命名文件

来自分类Dev

当源文件名包含嵌入空格时,如何快速复制文件并重命名

来自分类Dev

如何根据列(包括标题)拆分文件并重命名生成的文件?

来自分类Dev

使用 Lastwritetime 将文件复制到备份位置并重命名

来自分类Dev

复制并重命名DefaultTask类中的文件?

来自分类Dev

复制并重命名文件,添加动态前缀/后缀

来自分类Dev

Linux Shell脚本可复制并重命名多个文件

来自分类Dev

如何重命名文件并保留原始文件

来自分类Dev

BASH:查找并重命名文件和目录

来自分类Dev

提取目录中的文件夹名称列表后,如何使用Python以其他格式重命名它们?

Related 相关文章

  1. 1

    如何根据原始文件的更改重命名复制目录中的文件和子目录?

  2. 2

    Powershell:根据目录名查找文件,复制并重命名到同一文件夹并保持原始

  3. 3

    复制文件并重命名

  4. 4

    复制并重命名文件

  5. 5

    如何根据目录和子目录中的txt文件复制和重命名文件

  6. 6

    复制并重命名多个目录

  7. 7

    复制并重命名目录

  8. 8

    DELPHI如何复制.txt文件并重命名

  9. 9

    使用vbs复制并重命名最旧的文件

  10. 10

    外壳移动文件并重命名它们

  11. 11

    Gulp-复制并重命名文件

  12. 12

    复制文件并重命名-Gradle

  13. 13

    使用Ruby在ftp站点上移动并重命名文件

  14. 14

    使用Ruby在ftp站点上移动并重命名文件

  15. 15

    将文件复制到子目录并重命名

  16. 16

    Bash命令可以在多个目录中复制并重命名相同的文件名?

  17. 17

    如何在同一命令中复制目录并重命名?

  18. 18

    如何使用 Python 复制和重命名目录中的所有文件?

  19. 19

    如何使用 Gradle Copy 任务重命名我正在复制的文件路径上的目录?

  20. 20

    根据文件的父目录重命名文件

  21. 21

    当源文件名包含嵌入空格时,如何快速复制文件并重命名

  22. 22

    如何根据列(包括标题)拆分文件并重命名生成的文件?

  23. 23

    使用 Lastwritetime 将文件复制到备份位置并重命名

  24. 24

    复制并重命名DefaultTask类中的文件?

  25. 25

    复制并重命名文件,添加动态前缀/后缀

  26. 26

    Linux Shell脚本可复制并重命名多个文件

  27. 27

    如何重命名文件并保留原始文件

  28. 28

    BASH:查找并重命名文件和目录

  29. 29

    提取目录中的文件夹名称列表后,如何使用Python以其他格式重命名它们?

热门标签

归档