我有一个非常简单的脚本,只想使用bash编写。
给出一个包含0..N * .XML文件的文件夹;我想按名称排序并删除N-10个文件(保留最后10个文件)。
我一直在找寻和尾巴/头部,但找不到办法
find /mnt/user/Temporary/1 -name *.xml | tail -n +10 | rm
请阅读。 关于保留最后10个文件。如果文件少于10个,则不应删除任何文件!
编辑: 当有人关闭但没有回答问题时,这是那些遇到相同问题的人的解决方案。
#!/bin/bash
files=()
while IFS= read -r -d $'\0'; do
files+=("$REPLY")
done < <(find . -name *.xml -print0 | sort)
Limit=$((${#files[@]}-10))
count=0
while [ $Limit -gt $count ]; do
rm "${files[count]}"
let count=count+1
done
也许某些linux“ pro”可以对其进行优化或为其提供一些参数(例如限制,路径和文件模式)以使其可在任何地方调用。
答案 0 :(得分:2)
编辑:新答案
#!/usr/bin/env bash
files=$(find *.xml | wc -l)
[ "$files" -lt 10 ] && echo "Files are less than 10..." && exit 1
count=$(($files-10))
for i in $(find *.xml | sort -V); do
[ $count -eq 0 ] && echo "Done" && exit 1
rm $i
((count--))
done