我一直在尝试创建一个执行以下操作的 bash 脚本。
使用find
命令搜索超过 7 天的文件(find . -type f -mtime +7 ! -iname '.*'
,获取父目录(找到的文件),parent directory
在不同的目录中创建一个同名的新文件夹并添加_todaysDate
(date '+%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),因为输出将更容易排序。