2016-11-17 16 views
1

까지 바꿉니다. 여기에 도움이 될 것입니다. 목표는 모든 .txt 파일의 이름을 ruby의 사용자 입력 디렉토리에서 .text로 변경하는 것입니다. 필자는 요구 사항으로 fileutils를 사용해야한다. 현재 스크립트를 실행할 때 오류가 발생하지 않습니다. 그러나 아무 일도 일어나지 않습니다 ... 여러분 중 한 분이 문제를 정확하게 지적 해 주셨을 것입니다.Ruby : 지정된 사용자 내의 모든 파일의 이름을 .txt에서

#!/usr/bin/ruby 
#This program was written by me 
puts “what directory would you like to change? “ 
require 'fileutils' 
pathname = gets.chomp 
def rename(pathname) 
    currentdir = Dir.new('.') 
    newfile = FileTest.exists?(pathname.to_s) 
    if pathname != "q" 
     if newfile == "true" 
      require 'fileutils' 
        newfile.each do |f| 
        FileUtils.mv "#{File.dirname(f)}/#{File.basename(f, '.*')}.txt", "#{File.dirname(f)}/#{File.basename(f,'.*')}.text" 
        end 
     elsif currentdir 
      require 'fileutils' 
      (currentdir).each do |f| 
       FileUtils.mv "#{File.dirname(f)}/#{File.basename(f, '.*')}.txt", "#{File.dirname(f)}/#{File.basename(f,'.*')}.text" 
      end 
     else 
      puts "Invalid Path" 
     end 
    end 
end 

편집 : 지금 문제는 알고 있지만 코드를 어디에 넣어야할지 모르겠다. 사용자가 입력 한 디렉토리로 cd해야하는데, 그 이유는 홈 디렉토리의 .txt 파일 만 변경할 수 있기 때문입니다.

이 질문은 fileutils를 사용하고 사용자가 편집 할 디렉토리를 입력하도록 요구하기 때문에 제안 된 설명과 다릅니다. 당신은 rename 기능

2) rename 기능은 불필요한 검사를했다 호출되지 않은

1)이 항목은 어디에서 파일 이름을 찾습니다 내가 당신의 코드에서 알고있는 것처럼 fileutils에 속하는 명령어

+0

가능한 복제 [대량 루비에있는 파일의 이름을 변경하는 방법 (http://stackoverflow.com/questions/10758694/how-to- mass-rename-files-in-ruby) – Wes

+0

실제로 'rename'메소드를 실제로 호출하지 않았기 때문일 수 있습니까? – Rashmirathi

+0

그것은 동일하지 않습니다. 요구 사항은 fileutils를 사용하고 사용자가 편집하고자하는 디렉토리를 입력하게하십시오. 이 항목은 어디에서든지 파일 이름을 찾고 fileutils를 사용하지 않습니다. –

답변

0

를 사용하지 않습니다 newfile, currentdir - 현재 dir에서 실행하려면 "."을 이해해야합니다. 현재의 dir에서 glob을 할 것입니다.



나는 아무 것도 이름을 변경하지 않는다해야하기 때문에 이름 바꾸기의 rename의 외부로 pathname != "q"를 이동했습니다.

그래서 최종 코드 :

#!/usr/bin/ruby 
#This program was written by me 

require 'fileutils' 

def rename(pathname) 
    if File.directory?(pathname.to_s) 
    puts "renaming files in path"+pathname.to_s 
    Dir.glob(File.dirname(pathname.to_s)+"/*.txt").each do |f| 
     FileUtils.mv f, "#{File.dirname(f)}/#{File.basename(f,'.*')}.text" 
     puts "#{File.basename} => #{File.basename(f,'.*')}.text" 
    end 
    else 
    puts "Invalid Path" 
    end 
end 

puts "what directory would you like to change? " 
pathname = gets.chomp 

if pathname != "q" 
    rename(pathname) 
end 



추신 일반 사용자는 호출합니다 :

rename -S .txt .text /path/to/files/*.txt 

또는 :

rename -S .txt .text ./*.txt 
+0

동일한 문제로 인해 거의 시작되었습니다. 나는 스크립트를 실행하고 아무 일도 일어나지 않는다. 오류는 없습니다. 그러나 경로가 유효하지 않은 경우 알려줍니다. 그것은 이전에는 그렇게하지 않았습니다. –

+0

스크립트를 호출하는 방법과 경로로 전달하는 것을 쓸 수 있습니까? – num8er

+0

또한 경로에 해당 확장명의 파일이 있는지 확인하십시오. 정의 – num8er