用ruby从文件名中删除数字字符

jvidinwx  于 2023-05-28  发布在  Ruby
关注(0)|答案(2)|浏览(131)

大家早上好。我需要写一个Ruby脚本来删除文件夹中文件名中的数字字符。它的工作,但不幸的是,一些文件被删除,因为一旦数字字符被删除,他们将有相同的名称,或者他们将是空的。我试图插入一个条件来避免它,但是没有任何东西被重命名了。你能帮我吗?这就是代码:

require 'fileutils'
folder = ARGV[0]
Dir.chdir(folder)
Dir.glob("*.*") do |file|
  new_name = file.gsub(/[0-9]/, "")
  FileUtils.mv(file, new_name) if !file.empty? && !File.exist?(file)
end

先谢谢你了。

uqjltbpv

uqjltbpv1#

我相信你是想这样写:

!new_name.empty? && !File.exist?(new_name)

而不是这样:

!file.empty? && !File.exist?(file)

不再重命名任何内容
...因为脚本说“不要重命名任何存在的文件”😅

tp5buhyn

tp5buhyn2#

为了扩展现有的答案,您应该检查并报告是否满足某些条件。通过打印到STDERR,您可以选择隐藏这些错误,或者打印它们。

require 'fileutils'
folder = ARGV[0]
Dir.chdir(folder)
Dir.glob("*.*") do |file|
  new_name = file.gsub(/[0-9]/, "")

  if new_name.empty?
    STDERR.puts "ERR: #{file}: new file name would be empty."
  elsif File.exist?(new_name)
    STDERR.puts "ERR: #{file}: moving to #{new_name} would overwrite existing file."
  else
    FileUtils.mv(file, new_name)
  end
end

相关问题