考虑扩展名,如果文件名不存在,则移动文件


1

例如,在文件夹A中,我有foo.jpg和bar.jpg。在文件夹B中,我有foo.png和foobar.png。我只需要一个版本的文件而不管扩展名,所以我只想将foobar.png移动到文件夹A.我该怎么做?这是一个简单的例子,文件夹B中有近2,000个文件,因此手动比较会非常繁琐。

Answers:


1

将以下内容另存为文本文件并使其可执行。从命令行调用它,将路径传递到文件夹A和文件夹B.

#!/usr/bin/ruby

if ARGV.size != 2
    STDERR.print "#Usage: #{$0} source/folder destination/folder\n"
    exit 1
end

a = ARGV[0].chomp("/")
b = ARGV[1].chomp("/")
old_bases = Hash.new
Dir.foreach(b) do |f| 
    next if f =~ /^\./
    old_bases[f.sub(/\.[^.]*$/, "").downcase] = true
end
Dir.foreach(a) do |f|
    next if f =~ /^\./
    fbase = f.sub(/.[^.]*$/, "").downcase
    unless old_bases[fbase]
        File.rename( "#{a}/#{f}", "#{b}/#{f}" )
        old_bases[fbase] = true
    end
end

编辑脚本以检查参数数量,并修复File.rename中的错误

再次编辑以忽略案例。也就是说,如果bar.jpg已经存在,请不要移动Bar.png。


谢谢你的回答,除了我收到一个错误:未定义的方法`chomp'为nil:NilClass(NoMethodError)
Sum Guy

您需要使用两个参数调用脚本,即两个文件夹的路径。使用0或1参数时,ARGV [0]和/或ARGV [1]将为零,并且不能chomp编辑。如果ARGV.size!= 2,我可能已检查并输出错误消息。您可以这样做,和/或硬编码两个文件夹的路径。想想看,我会这样做,因为你可能不知道红宝石。
ganbustein 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.