解压文件输出错误
Untar files outputting error
我最近创建了一个程序,可以解压指定目录中的文件。解压文件时出现错误:
/usr/local/lib/ruby/1.9.1/fileutils.rb:1423:in `stat': No such file or directory - /path/to/directory/file.file (Errno::ENOENT)
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1423:in `block in fu_each_src_dest'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1437:in `fu_each_src_dest0'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1421:in `fu_each_src_dest'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:504:in `mv'
from spreadsheet:97:in `block in unlock_archive_spreadsheet'
from spreadsheet:76:in `each'
from spreadsheet:76:in `unlock_archive_spreadsheet'
from spreadsheet:24:in `start'
from spreadsheet:111:in `<main>'
当我尝试 运行 将在其中使用的目录中的程序时,它输出上述错误。
我有点困惑,因为当我测试 运行 这个程序时它起作用了。例如:
[me@me ruby]$ ruby spreadsheet
Is this an archive spreadsheet?: y
Enter Folio # of spreadsheet if unlocking multiple use comma followed by space: 2719569
Text file containing the information is: filelist_20120625.txt
Continue: yes
Preparing to extract file..
Extracting file...
Moving file to 4000_UW_spreadsheets directory
File extracted and moved successfully
[me@me ruby]$
这是来源:
70 require 'fileutils'
71
72
73 def unlock_archive_spreadsheet
74 print "Enter Folio # of spreadsheet if unlocking multiple use comma followed by space: "
75 folio = gets.chomp
76 folio.split(', ').each do |archived_file|
77 FileUtils.chdir("path/where/file/is")
78
79 archived_text_file = `grep -lr #{archived_file}.ods *.txt`
80 tar_name = archived_text_file.match(/\d+/).to_s
81 puts "Text file containing the information is: #{archived_text_file}"
82 print "Continue: "
83 continue = gets.chomp.downcase
84 if continue.start_with?("y")
85 puts "Preparing to extract file.."
86
87 if File.exist?("/path/to/file/#{archived_file}.ods")
88 puts "ERROR FILE EXISTS. Delete or move file and try again"
89 raise "File: #{archived_file}.ods exists in directory. Delete or move file to continue, if file is not found within directory, contact admin."
90 next
91 else
92 puts "Extracting file..."
93 `tar -xvzf UW_archive_#{tar_name}.tgz path/to/extract/from/#{archived_file}.ods`
94 end
95 puts "Moving file to 4000_UW_spreadsheets directory"
96
97 FileUtils.mv "/path/to/file/#{archived_file}.ods", '/path/to/move/to'
98
99 puts "File extracted and moved successfully"
100 else
101 puts "Exiting.."
102 exit 1
103 end
104 end
105 end
我是不是做错了什么?
如果您查看错误消息,就会明白为什么这个操作不起作用。您的代码中仍然有几个占位符路径。错误中明确显示了占位符。
好的,您的问题是以下三件事之一:
- 您没有对要移动到的目录的写入权限,我在 我自己的目录 中测试了您的代码,它运行良好,使用起来很好FileUtils,您可以使用 "package/gem" & "zlib" 代替 bash 命令,它看起来像这样:
extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename_here))
- 存档中不存在您的文件,或者存档中有问题。请与管理员或对您要进入的目录具有完全权限的人核实,看看它是否适合他们。
- 你的 bash 命令有点奇怪..
tar -xvzf UW_archive_#{tar_name}.tgz path/to/extract/from/#{archived_file}.ods
我不完全确定你在这里试图做什么。但是如果你需要改变目录,并且坚持使用bash,-C
就会改变成一个目录。这是对该命令的重写:tar -x -f UW_archive_#{tar_name}.tgz -C /path/to/change/to #{archived_file}.ods
-x
告诉bash从tar
中提取,-f
告诉它这是文件名,-C
说把这个文件名提取到这个目录。
这就是我真正能想到的全部,Ruby 几乎可以做 bash 可以做的所有事情,您所要做的就是找到 gem,或者用于它。希望这对您有所帮助!
编辑:
如果从 tarball 内部目录中的大型 tarball 中提取单个文件:tar -x -f tarname.tgz -C path/to/extract/to path/to/file/filename.file
那应该将文件从 tar 中提取出来并放入指定的目录中,不过要小心,这将提取文件和路径,要摆脱你可以使用的路径,--strip-components 1
数字是你要剥离多少条路径。或者您可以从路径中移动文件并删除路径本身,希望这对您有所帮助!
我最近创建了一个程序,可以解压指定目录中的文件。解压文件时出现错误:
/usr/local/lib/ruby/1.9.1/fileutils.rb:1423:in `stat': No such file or directory - /path/to/directory/file.file (Errno::ENOENT)
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1423:in `block in fu_each_src_dest'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1437:in `fu_each_src_dest0'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:1421:in `fu_each_src_dest'
from /usr/local/lib/ruby/1.9.1/fileutils.rb:504:in `mv'
from spreadsheet:97:in `block in unlock_archive_spreadsheet'
from spreadsheet:76:in `each'
from spreadsheet:76:in `unlock_archive_spreadsheet'
from spreadsheet:24:in `start'
from spreadsheet:111:in `<main>'
当我尝试 运行 将在其中使用的目录中的程序时,它输出上述错误。
我有点困惑,因为当我测试 运行 这个程序时它起作用了。例如:
[me@me ruby]$ ruby spreadsheet
Is this an archive spreadsheet?: y
Enter Folio # of spreadsheet if unlocking multiple use comma followed by space: 2719569
Text file containing the information is: filelist_20120625.txt
Continue: yes
Preparing to extract file..
Extracting file...
Moving file to 4000_UW_spreadsheets directory
File extracted and moved successfully
[me@me ruby]$
这是来源:
70 require 'fileutils'
71
72
73 def unlock_archive_spreadsheet
74 print "Enter Folio # of spreadsheet if unlocking multiple use comma followed by space: "
75 folio = gets.chomp
76 folio.split(', ').each do |archived_file|
77 FileUtils.chdir("path/where/file/is")
78
79 archived_text_file = `grep -lr #{archived_file}.ods *.txt`
80 tar_name = archived_text_file.match(/\d+/).to_s
81 puts "Text file containing the information is: #{archived_text_file}"
82 print "Continue: "
83 continue = gets.chomp.downcase
84 if continue.start_with?("y")
85 puts "Preparing to extract file.."
86
87 if File.exist?("/path/to/file/#{archived_file}.ods")
88 puts "ERROR FILE EXISTS. Delete or move file and try again"
89 raise "File: #{archived_file}.ods exists in directory. Delete or move file to continue, if file is not found within directory, contact admin."
90 next
91 else
92 puts "Extracting file..."
93 `tar -xvzf UW_archive_#{tar_name}.tgz path/to/extract/from/#{archived_file}.ods`
94 end
95 puts "Moving file to 4000_UW_spreadsheets directory"
96
97 FileUtils.mv "/path/to/file/#{archived_file}.ods", '/path/to/move/to'
98
99 puts "File extracted and moved successfully"
100 else
101 puts "Exiting.."
102 exit 1
103 end
104 end
105 end
我是不是做错了什么?
如果您查看错误消息,就会明白为什么这个操作不起作用。您的代码中仍然有几个占位符路径。错误中明确显示了占位符。
好的,您的问题是以下三件事之一:
- 您没有对要移动到的目录的写入权限,我在 我自己的目录 中测试了您的代码,它运行良好,使用起来很好FileUtils,您可以使用 "package/gem" & "zlib" 代替 bash 命令,它看起来像这样:
extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename_here))
- 存档中不存在您的文件,或者存档中有问题。请与管理员或对您要进入的目录具有完全权限的人核实,看看它是否适合他们。
- 你的 bash 命令有点奇怪..
tar -xvzf UW_archive_#{tar_name}.tgz path/to/extract/from/#{archived_file}.ods
我不完全确定你在这里试图做什么。但是如果你需要改变目录,并且坚持使用bash,-C
就会改变成一个目录。这是对该命令的重写:tar -x -f UW_archive_#{tar_name}.tgz -C /path/to/change/to #{archived_file}.ods
-x
告诉bash从tar
中提取,-f
告诉它这是文件名,-C
说把这个文件名提取到这个目录。
这就是我真正能想到的全部,Ruby 几乎可以做 bash 可以做的所有事情,您所要做的就是找到 gem,或者用于它。希望这对您有所帮助!
编辑:
如果从 tarball 内部目录中的大型 tarball 中提取单个文件:tar -x -f tarname.tgz -C path/to/extract/to path/to/file/filename.file
那应该将文件从 tar 中提取出来并放入指定的目录中,不过要小心,这将提取文件和路径,要摆脱你可以使用的路径,--strip-components 1
数字是你要剥离多少条路径。或者您可以从路径中移动文件并删除路径本身,希望这对您有所帮助!