找到最新的文件。多种文件类型限制

找到最新的文件。多种文件类型限制

我想写一个命令来给我最新文件在目录中递归地。但这并不是我唯一的限制。这些文件必须是mp3 或 jpg文件。 (不区分大小写首选)我只需要最新文件的创建日期。如果可能的话,我希望它的格式如下:30-12-2014(所以:日月年

这是我目前所拥有的:

find .  -name '*.mp3' -or -name '*.JPG'   -printf "%TD \n" | sort -rn | head -n 1

但效果并不好。我只得到 JPG,并且日期没有格式化。

答案1

像这样的东西应该有效:

find . \( -iname "*.mp3" -o -iname "*.jpg" \) -printf '%TY%Tm%Td %TT %p\n' | sort -r

这应该找到(不区分大小写)以 mp3 或 jpg 结尾的文件,打印出修改时间,然后按相反顺序对其进行排序。

当您作为两个命令有效运行它时,它似乎会显示两种文件类型:

( find . -iname "*.mp3" -printf '%TY%Tm%Td %TT %p\n' ; find . -iname "*.jpg" -printf '%TY%Tm%Td %TT %p\n' ) | sort -r

答案2

zsh

setopt extendedglob
zmodload zsh/stat
zstat -F %F +mtime -- **/(#i)*.(mp3|jpg)(Om[1])

请注意,它是基于最后修改时间,创建时间(无论这意味着什么)通常在 Linux 上不容易使用。

它不考虑隐藏文件。如果您想要它们,请添加D上面的通配限定符。

答案3

另请参阅以下内容:

find . -type f -mtime -1 \( -name '*.mp3' -o -name '*.jpg' \) -printf '%AY-%Am-%Ad %P \n'

答案4

您指定了 -or,需要是 -o,正如其他人所纠正的那样。我认为你还需要括号(更正我原来的帖子)。我建议使用%T@格式说明符(自 1970 年以来的秒数),这样排序更清晰;然后你可以使用它来转换它

date --date="@`find . \\( -iname "*.mp3" -o -iname "*.jpg" \\) -printf '%T@\n' | sort -rn | head -n1`" 

管他呢。您还可以使用您想要的任何日期格式+

相关内容