我有一个我们部署的目录。部署(本身就是目录)以以下格式命名:
<application-name>_<date>
e.g. trader-gui_20091102
有多个应用程序部署到同一个父目录,因此父目录的内容可能如下所示:
trader-gui_20091106
trader-gui_20091102
trader-gui_20091010
simulator_20091106
simulator_20091102
simulator_20090910
simulator_20090820
我想编写一个bash脚本来清除除最新应用程序之外的所有部署。 (最新的当前部署名称中的日期表示)。因此,在上面的父目录上运行bash脚本会留下:
trader-gui_20091106
simulator_20091106
任何帮助都将不胜感激。
答案 0 :(得分:1)
快速单行:
ls | sed 's/_[0-9]\{8\}$//' | uniq |
while read name; do
rm $(ls -r ${name}* | tail -n +2)
done
列出文件,砍掉下划线后跟8位数字,只保留唯一的名称。对于每个名称,请删除除最新名称之外的所有内容。
假设:
tail -n +2
答案 1 :(得分:0)
shopt -s exglob
ls|awk -F"_" '{a[$1]=$NF}END{for(i in a)print i"_"a[i]}'|while read -r F
do
rm !($F)
done
由于您在filename中的日期已经是“可排序的”,因此awk命令会查找每个应用程序的最新文件。 rm (!$F)
只是意味着删除那些不是最新的文件名。
答案 2 :(得分:0)
您可以尝试查找:
# Example: Find and delete all directories in /tmp/ older than 7 days:
find /tmp/ -type d -mtime +7 -exec rm -rf {} \; &>/dev/null