【问题标题】:Find most recently added file in current directory在当前目录中查找最近添加的文件
【发布时间】:2014-07-21 23:16:12
【问题描述】:

所以我让这个在本地工作,但它不在我的服务器上工作。问题是因为我使用scp 命令将我的文件传输到服务器吗?

这是我的代码:

// Local
if ('localhost' == $_SERVER['HTTP_HOST']) {
    $cmd = 'find resume*.pdf -type f -print0 | xargs -0 stat -f "%m %N" |sort -rn | head -1 | cut -f2- -d" "';
// Production
} else {
    $cmd = 'find resume*.pdf -type f -print0 | xargs -0 ls -drt | tail -n 1';
}
$results = exec($cmd);
echo '$results = ' . $results;

本地输出:

$ php -f index.php
$ $results = resume june 2014.pdf

远程输出:

$ php -f index.php
$ $results = resume_may_2014.pdf

这是我查看服务器上文件的修改日期时的样子。 我也无法弄清楚为什么它们(如在具有相同修改日期的简历文件中)以这种方式排序。它们不像是按字母顺序、文件大小等排序的。 p>

<!-- language: lang-bash -->
username@username.com [~/www/resume]# ls -lt
total 432
drwxr-xr-x  6 username username   4096 Jun  1 14:05 ./
-rw-r--r--  1 username username    927 Jun  1 14:00 index.php
-rw-r--r--  1 username username   2028 Jun  1 13:55 error_log
-rw-r--r--  1 username username 135855 Jun  1 13:37 resume_may_2014.pdf
-rw-r--r--  1 username username      0 Jun  1 13:37 resume_feb_2014.pdf
-rw-r--r--  1 username username 118698 Jun  1 13:37 resume\ june\ 2014.pdf
drwxr-xr-x  4 username username   4096 Jun  1 13:18 resume\ june\ 2014.pages/
-rw-r--r--  1 username username 135855 May 31 18:59 resume.pdf

引用的文章:

【问题讨论】:

  • 文件列表按照您使用-t 选项请求的修改时间排序(最新的在前)。
  • 谢谢@ooga!请注意我添加的部分(如在具有相同修改日期的简历文件中)部分。即:这些文件是如何排序的:resume_may_2014.pdf、resume_feb_2014.pdf、resume\ june\ 2014.pdf 等。这就是我的困惑。
  • 对不起。我显然没有很好地阅读你的问题。在具有相同修改日期的文件组中,它们可能按照 inode 的顺序排列,这并不是特别有用。
  • 也许创建时间(-c)比上次修改时间对你有用。

标签: php bash shell scp command-line-interface


【解决方案1】:

为什么不在 PHP 中这样做?

<?php
$directory = '/path/to/directory';
$filename = null;
if ($handle = opendir($directory)) {
    while (false !== ($entry = readdir($handle))) {
        // if (!is_dir($entry)) { // no directories, only files. (Otherwise exclude directories . and ..)
        if (substr($entry,0,6) == 'resume' && substr($entry,-4) == '.pdf') { // only resume*.pdf
            if ($filename === null || $time < filectime($entry)) { // or use filemtime() for last modified time in stead of last change time
                $time = filectime($entry);
                $filename = $entry;
            }
        }
    }
    if ($filename === null) {
        echo "No files found";
    } else {
        echo "Last changed file is: " . $filename . ". It was last changed at: " . date('r', $time) . ".";
    }
    closedir($handle);
} else {
    echo "Could not open directory";
}
?>

DEMO

【讨论】:

  • 你现在很棒。我使用 bash 的原因是因为我想更多地学习它,但这完全有效。非常感谢!
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 2019-06-14
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多