【问题标题】:Move files to directories将文件移动到目录
【发布时间】:2013-04-14 19:11:28
【问题描述】:

下面的构造不起作用有什么原因吗?文件列表包含文件名。名称列表包含一个名称列表,当这些名称作为文件名的子字符串匹配时,会导致循环将文件移动到名为 $name 的目录中。看起来它应该可以工作,但它没有移动文件。有什么更好的方法来构建它?

 FILE: for my $file (@file_list) {

  for my $name (@name_list) {

    if ($file =~ /^\Q$name\E/) {
      rename "/Users/path/to/file/I/need/to/move/$file", "/Users/path/to/directory/i/need/to/move/file/to/$name/$file" or die "rename failed because: $!\n";
     next FILE;
    }
  }
  print "no match for $file\n";
}

【问题讨论】:

  • 你使用什么语言?
  • @ChrisLoonam 看起来像 PHP
  • 这看起来更像 Perl 而不是 PHP(for my $var=~ 是其中的标志)。
  • 语言是perl。
  • 哦,FILE: 是一个循环标签,应该在第一个 for 之前附加到代码 jst。

标签: perl file directory rename


【解决方案1】:

正确的代码:

for my $file (@file_list) {
  my $found = 0;
  for my $name (@name_list) {
    if ($file =~ /^\Q$name\E/) {
      print "failed to rename $file\n" unless rename "/Users/path/to/file/I/need/to/move/$file", "/Users/path/to/directory/i/need/to/move/file/to/$name/$file";
      $found = 1;
      last;
    }
  }
  print "no match for $file\n" unless $found;
}

【讨论】:

  • 为什么,@Jack,这是一个更好的公式吗?
  • 如果找不到文件,您的代码将退出(用 die 重命名),但这将继续并打印错误消息...
  • 实际上,我也遇到了很多“重命名失败...”。是的,程序还在继续,这很好。但是文件并没有移动。呜呜呜……
  • 你有这个/Users/path/to/file/I/need/to/move 和这个/Users/path/to/directory/i/need/to/move/file/to 目录吗?
  • 你可以使用@file_list = glob('/Users/path/to/file/I/need/to/move/*');来收藏@file_list
猜你喜欢
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2016-05-03
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多