如何创建记录目录中文件最后编辑日期的文本文件



我试图创建一个文本文件,其中包含给定目录中所有.pzfx文件上次编辑的日期。最大的问题是所有的文件名都不是字符串,这会使在bash脚本中遍历它们变得复杂。

这是我目前为止的bash脚本:

#!/bin/bash
find . -type f|grep .pzfx$ | while read file; do for i in "$file" stat -c ‘%y’ "$file" >> exp.dates.txt; done

当我运行这个时,我得到以下错误:

./date.sh: line 3: syntax error near unexpected token `>>'
./date.sh: line 3: `find . -type f|grep .pzfx$ | while read file; do for i in "$file" stat -c ‘%y’ "$file" >> exp.dates.txt; done'

当重定向一个循环的输出时,>>必须写在done之后。此外,您的内部for循环是不必要的,并且缺少dodone

顺便说一下:使用-exec时根本不需要循环,这对于带有空格的文件名也更安全。

find -type f -name *.pzfx -exec stat -c %y {} + > exp.dates.txt

我重构了你的代码,只是稍微调整你的find,使事情更容易遵循,并能够得到它的工作。

重构代码:

#!/bin/bash
file_ext="${1:-.pzfx}"
while read -r ff ; do
echo "${ff}"
stat -c '%y' "${ff}" >> exp_dates.txt
done < <(find . -name "*${file_ext}" -type f) 

如果使用GNUfind(以及其他可能的;查看本地手册页),您根本不需要stat:

find . -type f -name "*.pzfx" -printf "%tn" > exp.dates.txt

%t格式为

文件的最后修改时间,以ctime(3)函数返回的格式。

对于更灵活的时间格式,使用%Tfmt;fmt的描述请参见手册。

最新更新