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