运行脚本跳过文件

时间:2019-06-15 16:52:01

标签: linux bash

我有一个非常简单的脚本,只想使用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”可以对其进行优化或为其提供一些参数(例如限制,路径和文件模式)以使其可在任何地方调用。

1 个答案:

答案 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
  • $ files将* .xml的数量存储在文件夹中
  • 如果该数字小于或等于10,则退出
  • 为要删除的文件数设置一个计数器
  • 按顺序循环浏览每个文件
  • 如果计数器等于0,则退出
  • 如果不删除文件并增加计数器