查找文件并插入文件修改日期
Find files and insert file modification date
我想在所有 .m 文件中附加一行包括文件修改日期(最好只是年份)。
要将可变文本附加到所有 .sh 文件:
find . -name "*.m" -exec sed -i '$a \n# File last modified in '"$date"'' {} \;
我可以获取每个文件的年份并将其插入同一行的文件内容中吗?
使用 GNU find 和 GNU awk 并假设您的文件名中没有换行符或 leading/trailing 白色 space
while read -r year file; do
awk -i inplace -v year="$year" '{print} ENDFILE{print "#", year}' "$file"
done < <(find . -type f -name '*.sh' -printf '%TY %p\n')
你可以只用一个从 find 到 awk 的管道,然后修改 ARGV[] 来创建文件列表,你可以更有效地做到这一点,你可以让它能够处理名称中的换行符,但它有更多的代码,我'我太懒了
这个 find
单行线可能就是您想要的:
find -name '*.sh' -exec bash -c 'printf "# %(%Y)T\n" $(stat -c %Y "") >> ""' _ {} \;
假设您有 stat
来自 GNU coreutils。
一些注意事项:
执行命令字符串的 bash
语法是 bash -c command_string arg_0 arg_1 ... arg_n
(args 是可选的)。 arg_0
对应bash特殊参数[=16=]
,arg_1
对应bash特殊参数</code>,以此类推,在命令字符串中。对于 <code>find
找到的每个文件,{}
替换为路径名并执行 bash 命令。字符串 _
被分配给 [=16=]
(它通常代表 shell 或 shell 脚本的名称,我们在这里不感兴趣,因为我们是 运行一个命令字符串,不是一个文件),路径名被分配给</code>,然后执行命令<code>printf "# %(%Y)T\n" $(stat -c %Y "") >> ""
。 stat -c %Y
打印出自 Epoch 以来的秒数的最后一次数据修改时间,bash
的 printf
内置格式规范 %(%Y)T
将此值解释为一年。
我想在所有 .m 文件中附加一行包括文件修改日期(最好只是年份)。
要将可变文本附加到所有 .sh 文件:
find . -name "*.m" -exec sed -i '$a \n# File last modified in '"$date"'' {} \;
我可以获取每个文件的年份并将其插入同一行的文件内容中吗?
使用 GNU find 和 GNU awk 并假设您的文件名中没有换行符或 leading/trailing 白色 space
while read -r year file; do
awk -i inplace -v year="$year" '{print} ENDFILE{print "#", year}' "$file"
done < <(find . -type f -name '*.sh' -printf '%TY %p\n')
你可以只用一个从 find 到 awk 的管道,然后修改 ARGV[] 来创建文件列表,你可以更有效地做到这一点,你可以让它能够处理名称中的换行符,但它有更多的代码,我'我太懒了
这个 find
单行线可能就是您想要的:
find -name '*.sh' -exec bash -c 'printf "# %(%Y)T\n" $(stat -c %Y "") >> ""' _ {} \;
假设您有 stat
来自 GNU coreutils。
一些注意事项:
执行命令字符串的 bash
语法是 bash -c command_string arg_0 arg_1 ... arg_n
(args 是可选的)。 arg_0
对应bash特殊参数[=16=]
,arg_1
对应bash特殊参数</code>,以此类推,在命令字符串中。对于 <code>find
找到的每个文件,{}
替换为路径名并执行 bash 命令。字符串 _
被分配给 [=16=]
(它通常代表 shell 或 shell 脚本的名称,我们在这里不感兴趣,因为我们是 运行一个命令字符串,不是一个文件),路径名被分配给</code>,然后执行命令<code>printf "# %(%Y)T\n" $(stat -c %Y "") >> ""
。 stat -c %Y
打印出自 Epoch 以来的秒数的最后一次数据修改时间,bash
的 printf
内置格式规范 %(%Y)T
将此值解释为一年。