在文件的名称后附加文件的最后修改日期

时间:2019-06-29 09:45:54

标签: bash last-modified

我正在努力寻找一种方法来获取文件夹和子文件夹中每个文件的最后修改日期,并将它们相应地附加到其名称中。到目前为止,我只能为每个文件附加一个自定义文本,在这种情况下,它是来自以下命令的_Suffixfind * -exec mv {} {}_Suffix \;

也许这不是最好的方法,因为我的文本插入了文件的末尾,因此它更改了文件的扩展名,但至少可以起作用:)

但是我想知道如何插入上一个修改日期而不是_Suffix并递归地对每个文件执行。

1 个答案:

答案 0 :(得分:0)

find . -type f -exec bash -c 'for arg; do arg=${arg#./} mod=$(stat -c %x "$arg") base=${arg%.*} ext=${arg#$base}; echo mv -i "$arg" "${base}_${mod%% *}$ext"; done' _ {} +

(多行版本以提高可读性):

find . -type f -exec bash -c 'for arg; do
  arg=${arg#./} mod=$(stat -c %x "$arg") base=${arg%.*} ext=${arg#$base}
  echo mv -i "$arg" "${base}_${mod%% *}$ext"
done' _ {} +

我将echo留在了那里,让您查看在实际运行之前将要运行的内容。确定要移动文件后,将其删除。

它会在扩展名之前添加您想要的 ,但如果满足以下条件,它将完全失败

  • 文件名不包含点
  • 该文件位于确实包含点的文件夹路径中

它也不能在带有双扩展名的文件上正常工作,例如.tar.gz

说明: 我正在使用find . -type f -exec bash -c '...' _ {} +将所有文件传递到bash脚本 bash脚本对所有文件执行相同的操作:获取修改date,发现basename.extension,然后将文件重命名为basename_date.extension