我想写一个命令来给我最新文件在目录中递归地。但这并不是我唯一的限制。这些文件必须是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`"
管他呢。您还可以使用您想要的任何日期格式+
。