小编Tel*_*hus的帖子

使用Perl删除一个非常庞大的文件夹的最佳策略是什么?

我需要删除给定文件夹下的所有内容(文件和文件夹).问题是文件夹里面有数百万个文件和文件夹.所以我不想一次性加载所有文件名.

逻辑应该是这样的:

  • 迭代文件夹而不加载所有内容
  • 获取文件或文件夹
  • 删除它 (详细说明文件或文件夹"X"已删除)
  • 去下一个

我正在尝试这样的事情:

sub main(){
  my ($rc, $help, $debug, $root)   = ();
  $rc = GetOptions ( "HELP"           => \$help,
                     "DEBUG"          => \$debug,
                     "ROOT=s"         => \$root);

  die "Bad command line options\n$usage\n" unless ($rc);
  if ($help) { print $usage; exit (0); }

  if ($debug) {
      warn "\nProceeding to execution with following parameters: \n";
      warn "===============================================================\n";
      warn "ROOT = $root\n";

  } # write debug information to STDERR

  print "\n Starting to delete...\n";  

  die "usage: $0 dir …
Run Code Online (Sandbox Code Playgroud)

perl file-handling

4
推荐指数
3
解决办法
1499
查看次数

使用正则表达式搜索除127.0.0.1之外的IP地址

使用命令行工具,我试图找到除127.0.0.1以外的任何IP地址,并替换为新的IP.我试过用sed:

sed 's/\([0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}\)\(?!127.0.0.1\)/'$ip'/g' file
Run Code Online (Sandbox Code Playgroud)

你能帮帮我吗?

regex linux sed

4
推荐指数
1
解决办法
477
查看次数

Ruby的长度方法是一个符号吗?为什么:长度有时与长度相同?

在阅读有关在Ruby中重新定义方法是多么容易时,我遇到了以下内容:

class Array
  alias :old_length :length
  def length
    old_length / 2
  end
end
puts [1, 2, 3].length
Run Code Online (Sandbox Code Playgroud)

当然,这是一个坏主意,但它说得好.但困扰我,我们之间进行切换:length,并length:old_lengthold_length那么容易.所以我这样试了:

class Array
  alias old_length length
  def length
    old_length / 2
  end
end
puts [1, 2, 3].length
Run Code Online (Sandbox Code Playgroud)

它工作得很好 - 显然就像第一个版本.我觉得有一些明显的东西让我失踪,但我不确定它是什么.

所以,在nuthsell,为什么:namename在这些情况下可以互换?

ruby alias symbols

3
推荐指数
1
解决办法
606
查看次数

为什么从Ruby调用Bash命令会抛出错误?

我正在尝试使用Ruby在某些图像上执行以下bash命令:

class Pingcrush
  def initialize
    Dir.foreach('drawable') do |item|
      next if item == '.' or item == '..'
      # do work on real items
      if item.end_with?(".png") then
        %x["wine pngcrush.exe -brute drawable/#{item} new/#{item}"]
      end
    end
  end
end
Pingcrush.new
Run Code Online (Sandbox Code Playgroud)

我在该目录的父既drawablenew,但是,当我试图运行该脚本,我总是得到同样的错误:

sh: wine pngcrush.exe -brute drawable/feed_cl.png new/feed_cl.png: not found
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我尝试切换我在Ruby中调用的路径,似乎无法使其工作.

ruby directory

3
推荐指数
1
解决办法
148
查看次数

用于Web开发的最佳ruby框架

我正在开展一个网络项目.我想在ruby中实现相同的功能.我知道像merb,sinatra这样的ruby框架.我想知道哪个是最适合使用ruby开发基于Web的应用程序的框架?

ruby frameworks

2
推荐指数
1
解决办法
2185
查看次数

阵列优化:什么更贵?

以下哪些代码更贵?

x = my_array.inject {|sum,i| int+=i }
Run Code Online (Sandbox Code Playgroud)

要么

x = eval(my_array.join('+'))
Run Code Online (Sandbox Code Playgroud)

ruby arrays optimization

2
推荐指数
1
解决办法
249
查看次数

如何在ruby中修改文本文件

我有一个名为ama.txt的文件,文件内容如下:

name      age   hobby       sex

amit      45    music       male

sumit     35    cricket     female
Run Code Online (Sandbox Code Playgroud)

现在我可以像这样打开文件:

File.open("ama.txt").each do

end
Run Code Online (Sandbox Code Playgroud)

如何修改hobby文件列?

ruby

2
推荐指数
1
解决办法
1万
查看次数

使用awk或其他方法转换最后一列中的日期格式

我有像这样的文件中的数据......

405,,,405,15.4,0,04/21/12 14:13:29
402,,,402,15.4,0,04/21/12 14:13:37
404,,,404,15.5,0,2012/04/21 14:14:05
404,,,404,15.4,0,2012/04/21 14:14:11
403,,,403,15.4,0,2012/04/21 14:14:17
Run Code Online (Sandbox Code Playgroud)

我想将最后一列转换为YYYY/MM/DD hh:mm:ss格式的日期.

有些行已经采用这种格式,因此应该忽略它们.

我尝试了以下awk命令,但它似乎很慢,有时会抛出错误

awk -F ',' '{ ("date -d \""$7"\" \"+%Y/%m/%d %T\"") | getline $7; print }' MyFile
Run Code Online (Sandbox Code Playgroud)

这不必在awk中完成.我在标准的Debian命令行中有任何实用程序.

linux bash awk sed

2
推荐指数
1
解决办法
2850
查看次数

Ruby错误:"字符类有''没有转义"和"字符类的过早结束"

对于这行代码:

text = totaltext2.reject {|sentence| nilfacs.any?{|fac| sentence =~ /#{fac}/i}}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

1.)"角色等级'''没有逃避"

2.)"字符类过早结束"后跟:'in'每个"','in"任何?"','in"reject"','in'

谁能告诉我需要改变什么和/或问题是什么?我无法弄清楚错误是什么.

ruby regex special-characters

2
推荐指数
1
解决办法
2425
查看次数

execvp - ls:fts_open:没有这样的文件或目录

我目前正在努力解决这个错误.我正在编写一个shell模拟器,使用fork()来执行使用execvp();的命令.几乎我尝试解析到我的shell的每个命令都工作得很好,除了没有参数的ls.如果我尝试执行ls -lah,一切正常,但是一个简单的ls不会,收到以下错误:

ls: fts_open: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段:(只是必不可少的)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        printf("%d\n", strlen(args[1]));
        args[2] = NULL;
        execvp(args[0], args);
      }
      else wait(NULL);
      puts("BACK TO PARENT");
    }
Run Code Online (Sandbox Code Playgroud)

这是ls的输出:

ls
CHILD
ls

0
ls: fts_open: No such file or directory
BACK TO PARENT
Run Code Online (Sandbox Code Playgroud)

如你所见,args [0]包含ls,args [1]为空,因为没有参数,args [1]的长度为0,但我不断收到错误.

有什么想法吗?

编辑:

感谢Jonathan Leffler找到它:(同样,它似乎只是Mac上的一个问题)

关键是args [1]实际上并不是空的,因此,操作系统会尝试打开''文件,显然,该文件不存在,并且看起来不能创建,因为它不是真是个名字.

所以,这就是我所做的:检查args的len [1].如果为0,则将其设置为NULL.(只是释放内存并没有真正帮助)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        if (strlen(args[1]) == 0)
            args[1] = 0;
        args[2] = NULL;
        execvp(args[0], …
Run Code Online (Sandbox Code Playgroud)

c fork exec execvp

2
推荐指数
1
解决办法
5736
查看次数