在目录中查找早于创建其父文件夹的文件并将其移动到那里

在目录中查找早于创建其父文件夹的文件并将其移动到那里

我一直在尝试创建一个执行以下操作的 bash 脚本。

使用find命令搜索超过 7 天的文件(find . -type f -mtime +7 ! -iname '.*',获取父目录(找到的文件),parent directory在不同的目录中创建一个同名的新文件夹并添加_todaysDatedate '+%m%d&y),然后将找到的文件移动到其中。

最好的办法是什么while???for循环do?你会怎么做?

提前致谢!

编辑:给你一个文件结构示例

folder1
   - folder2
      -oldfile1

folder1a
   - folder2a
      -folder3a
        -oldfile2

----
In a new directory, a new folder would be created ( and that folder's name would be the parent folder of the old file, and tagged with a date (_040114) - this is where i get the format date '+%m%d%y) and the old files would then be moved in there. Example below -

- new_directory
  - folder2_date
    - oldfile1
  - folder3a_date
    - oldfile2

我希望这能解释清楚我正在做的事情。

答案1

您的规范确实需要示例文件结构,因为它留下了很多可供解释的地方。您想要哪一个(在众多常见用例中,每个用例都会得到不同的答案)?

以下是一些入门知识。我做了以下假设:

  • 您正在运行/HERE/ 的脚本
  • 您希望将存档文件放在 /THERE/
  • 您正在包含子目录的目录中运行(例如 /HERE/lie/old/files.txt)
  • 你想要类似 /THERE/lie_MMDDYY/old/files.txt 的内容

find . -type f -mtime +7 -printf '%h\n' \ | sort -u \ | sed -e 's,^./,,' \ | while read olddir do moveto="/THERE/$(echo \"$olddir\" | cut -d/ -f1)_$(date +%m%d%y)/$(echo \"$olddir\" | cut -d/ -f2-)" echo mv "$olddir" "$moveto" done

当准备“愤怒地”运行它时,删除“回声”。我有这一行,但为了便于阅读,我把它分开了。

我建议您将日期格式更改为使用$(date -I),因为输出将更容易排序。

相关内容