从非当前目录获取最新文件

从非当前目录获取最新文件

我无法执行一个命令,该命令会给我另一个目录中的最新文件。

例子:

ls -tr | tail -n 1  /prj/somedir/anotherdir/closerdir/targetdir

其中有一个文件列表targetdir,我需要从列表中分离出最新的文件。

当我输入命令时,问题是我正在对目录使用 tail 命令。

示例 2:

ls -tr | tail -n 1 

tail如果我尝试从我正在工作的目录中获取最新文件,则使用该命令有效,但如果我尝试使用绝对路径从另一个目录使用,则无效。

关于如何完成这项任务有什么建议吗?

答案1

您没有指定 shell,因此我建议您使用扎什

ls /path/to/*(.om[1]) 

下面是一个包含五个文件的示例,这些文件都是在同一分钟内创建的(文件名形式为HHMMSS.txt):

> ls tmp/378142 
total 0
drwxr-xr-x   7 johnsyweb  staff  238 14 Jan 08:23 ./
drwx------  24 johnsyweb  staff  816 14 Jan 08:20 ../
-rw-r--r--   1 johnsyweb  staff    0 14 Jan 08:22 082237.txt
-rw-r--r--   1 johnsyweb  staff    0 14 Jan 08:22 082238.txt
-rw-r--r--   1 johnsyweb  staff    0 14 Jan 08:22 082239.txt
-rw-r--r--   1 johnsyweb  staff    0 14 Jan 08:22 082240.txt
-rw-r--r--   1 johnsyweb  staff    0 14 Jan 08:22 082241.txt

使用echo

> echo tmp/378142/*(.om[1])
tmp/378142/082241.txt

使用ls

> ls -laF tmp/378142/*(.om[1]) 
-rw-r--r--  1 johnsyweb  staff  0 14 Jan 08:22 tmp/378142/082241.txt

解释:

这使用了 Zsh 的文件名扩展

星号扩展为目录中的所有项目:

> echo tmp/378142/*        
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt

用 修饰它.表示所有常规文件(无目录或符号链接)。这称为通配符标志

> echo tmp/378142/*(.)  
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt

o指定排序顺序,on按名称排序:

> echo tmp/378142/*(.on)
tmp/378142/082237.txt tmp/378142/082238.txt tmp/378142/082239.txt tmp/378142/082240.txt tmp/378142/082241.txt

om按修改时间排序(Om)将反转顺序:

> echo tmp/378142/*(.om)
tmp/378142/082241.txt tmp/378142/082240.txt tmp/378142/082239.txt tmp/378142/082238.txt tmp/378142/082237.txt

[1]选择列表中的第一个项目:

> echo tmp/378142/*(.om[1])
tmp/378142/082241.txt

答案2

我不清楚你想要什么。如果你想要目录中最新文件的名称

  ls -t /prj/somedir/anotherdir/closerdir/targetdir | head -n 1

答案3

find /your/path -type f -exec ls -l \{\} \;

应该给你一个良好的开端(只有文件列出详细ls输出。不只是对输出进行排序并打印必要的行。

答案4

答案很简单 - 您需要在命令后立即输入相关目录的路径ls -t,否则ls会认为您指的是当前目录。然后head会读取管道输出ls并回显顶行。因此,会产生混淆。然后只需正确执行即可:

$ ls -t /prj/somedir/anotherdir/closerdir/targetdir | head -n 1

相关内容