gpt4 book ai didi

perl - 使用反引号时转义空格

转载 作者:行者123 更新时间:2023-12-05 01:09:48 26 4
gpt4 key购买 nike

我已经搜索过了,从我的角度来看,使用反引号是我解决这个问题的唯一方法。我正在尝试调用 mdls Perl 命令为目录中的每个文件查找它的上次访问时间。我遇到的问题是,在我来自 find 的文件名中我有 bash 显然不喜欢的未转义空格。在将文件名传递给 mdls 之前,是否有一种简单的方法可以转义文件名中的所有空格? .如果这是一个明显的问题,请原谅我。我对 Perl 很陌生。

my $top_dir = '/Volumes/hydrogen/FLAC';

sub wanted { # Learn about sub routines
if ($File::Find::name) {
my $curr_file_path = $File::Find::name. "\n";
`mdls $curr_file_path`;
print $_;
}
}

find(\&wanted, $top_dir);

最佳答案

如果您只是想要操作系统上次访问时间方面的“上次访问时间”,mdls是错误的工具。使用 perl 的 stat .如果您想根据 Mac 注册的应用程序(即 Quicktime 或 iTunes 的歌曲)获得最后访问时间,那么 mdls可能是正确的工具。 (您也可以使用 osascript 直接查询 Mac 应用程序...)

反引号用于捕获文本返回。由于您使用的是 mdls,因此我假设捕获和解析文本仍然存在。

所以有几种方法:

  • 使用system的列表形式并且不需要引用(如果您
    不关心返回文本);
  • 使用 String::ShellQuote在发送到 sh 之前转义文件名;
  • 在发送到 shell 之前构建字符串并用单引号括起来。这比听起来更难,因为带单引号的文件名会打败你的引号!例如,sam's song.mp4是一个合法的文件名,但如果你用单引号括起来,你会得到 'sam's song.mp4'这不是你的意思...
  • 使用 open打开一个管道到子进程的输出,如下所示:open my $fh, '-|', "mdls", "$curr_file" or die "$!";

  • String::ShellQuote 示例:
    use strict; use warnings;
    use String::ShellQuote;
    use File::Find;

    my $top_dir = '/Users/andrew/music/iTunes/iTunes Music/Music';

    sub wanted {
    if ($File::Find::name) {
    my $curr_file = "$File::Find::name";
    my $rtr;
    return if -d;
    my $exec="mdls ".shell_quote($curr_file);
    $rtr=`$exec`;
    print "$rtr\n\n";
    }
    }

    find(\&wanted, $top_dir);

    管道示例:
    use strict; use warnings;
    use String::ShellQuote;
    use File::Find;

    my $top_dir = '/Users/andrew/music/iTunes/iTunes Music/Music';

    sub wanted {
    if ($File::Find::name) {
    my $curr_file = "$File::Find::name";
    my $rtr;
    return if -d;
    open my $fh, '-|', "mdls", "$curr_file" or die "$!";
    { local $/; $rtr=<$fh>; }
    close $fh or die "$!";
    print "$rtr\n\n";
    }
    }

    find(\&wanted, $top_dir);

    关于perl - 使用反引号时转义空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795113/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com