在具有空格的目录中查找上次修改的文件

时间:2012-05-22 17:39:11

标签: macos perl bash find

我找到并调整了这个脚本,以递归方式查找目录中最近修改过的文件。它只在目录名称中有空格时才会中断。任何人都可以帮我调整脚本,以便它也可以读取带空格的目录吗?s

for i in *; do

find $i -type f | perl -ne 'chomp(@files = <>); my $p = 9; foreach my $f (sort { (stat($a))[$p] <=> (stat($b))[$p] } @files) { print scalar localtime((stat($f))[$p]), "\t", $f, "\n" }' | tail -1

done

5 个答案:

答案 0 :(得分:3)

的Perl?你没有bash,你喜欢写长行代码? ; - )

find . -type f -printf '%T+ %p\n' | sort -r | head -n1

答案 1 :(得分:2)

引用修复了所有内容。

find "$i" -type f

此外,您不需要tail。只需交换$a$b,然后在打印后退出。

find $i -type f | perl -lne 'chomp(@files = <>); my $p = 9; foreach my $f (sort { (stat($b))[$p] <=> (stat($a))[$p] } @files) { print scalar localtime((stat($f))[$p]), "\t", $f; exit }'

-l(字母“ell”)在打印时为您添加换行符。

修改

实际上根本不需要循环:

find  -type f | perl -lne 'chomp(@files = <>); my $p = 9; @files = sort { (stat($b))[$p] <=> (stat($a))[$p] } @files; print scalar localtime((stat($files[0]))[$p]), "\t", $files[0]'

答案 2 :(得分:1)

在Perl中编写所有内容似乎不那么混乱

perl -MFile::Find -e 'find(sub{@f=((stat)[9],$File::Find::name) if -f && $f[0]<(stat)[9]},".");print "@f")'

答案 3 :(得分:0)

由于您只处理当前目录,因此只能使用一个命令执行此操作:

find . -type f | perl -ne 'chomp(@files = <>); my $p = 9; foreach my $f (sort { (stat($a))[$p] <=> (stat($b))[$p] } @files) { print scalar localtime((stat($f))[$p]), "\t", $f, "\n" }' | tail -1

答案 4 :(得分:0)

默认情况下,下面的代码会搜索当前工作目录下的子树。您还可以在命令行上命名另外一个要搜索的子树。

#! /usr/bin/env perl

use strict;
use warnings;

use File::Find;

my($newest_mtime,$path);
sub remember_newest {
  return if -l || !-f _;
  my $mtime = (stat _)[9];
  ($newest_mtime,$path) = ($mtime,$File::Find::name)
    if !defined $newest_mtime || $mtime > $newest_mtime;
}

@ARGV = (".") unless @ARGV;
for (@ARGV) {
  if (-d) {
    find \&remember_newest, @ARGV;
  }
  else {
    warn "$0: $_ is not a directory.\n";
  }
}

if (defined $path) {
  print scalar(localtime $newest_mtime), "\t", $path, "\n";
}
else {
  warn "$0: no files processed.\n";
  exit 1;
}

如上所述,代码不遵循符号链接。如果在命令行中命名符号链接,则会看到

的输出
$ ./find-newest ~/link-to-directory
./find-newest: no files processed.

使用 bash ,您必须添加一个尾部斜杠以强制取消引用。

$ ./find-newest ~/link-to-directory/
Thu Jan  1 00:00:00 1970        hello-world