按日期将嵌套文件结构更改为filename

时间:2013-10-08 17:33:44

标签: bash

我有一组看起来像2013/10/08/access.log.xz的嵌套目录,我可以找到find . -name \*access.log.xz所需的所有日志文件。我想将它们全部放在一个以20131008_access.log.xz之类的日期为前缀的目录中。我甚至不知道从哪里开始。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果你有一个最近的bash或带有递归globbing的shell,你可以这样做:

shopt -s globstar
for logfile in **/*access.log.xz; do
  IFS=/ read year month day file <<< "$logfile"
  mv "$logfile" "${year}${month}${day}_${file}"
done

如果你有一个较旧的bash,你可以模仿效果,但它更难读:

find . -name '*access.log.xz' -exec bash -c 'for logfile; do
    IFS=/ read dot year month day file <<< "$logfile"
    mv "$logfile" "${year}${month}${day}_${file}"
done' _ {} +