Bash 用于删除目录中除最新文件以外的旧文件的脚本N
我想写一个脚本,从旧文件中清除备份目录,只留下最新的N。我还想在不使用Bash 用于删除目录中除最新文件以外的旧文件的脚本N,bash,Bash,我想写一个脚本,从旧文件中清除备份目录,只留下最新的N。我还想在不使用ls的情况下执行此操作 昨天,我得到了以下代码: counter=0 while IFS=/ read -rd '' time file; do ((counter++ < ${KEEP_NUMBER:?})) && continue rm -f "$file" done < <(find . -maxdepth 1 -type f -printf "%T@
ls
的情况下执行此操作
昨天,我得到了以下代码:
counter=0
while IFS=/ read -rd '' time file; do
((counter++ < ${KEEP_NUMBER:?})) && continue
rm -f "$file"
done < <(find . -maxdepth 1 -type f -printf "%T@/%p\0" | sort -znr)
计数器=0
而IFS=/read-rd''时间文件;做
((计数器++<${KEEP_NUMBER:?}))&继续(&C)
rm-f“$file”
完成<如果您有
- 支持数组的shell(正如bash所做的那样)
- 访问
测试
(可以比较两个文件的使用期限)
这是我的尝试(它可能无法处理文件名中的空格,但可以很容易地修复)
#!/bin/bash
declare -a files
for file in *
do
files[${#files[@]}]=$file
done
# Bubble sort the files from newest to oldest
declare -i i j count=${#files[@]}
while true
do
declare -i sorted=1
for ((i=1;i<count;i++))
do
let j=i-1
if [ ${files[$j]} -ot ${files[$i]} ]
then
sorted=0
f=${files[$j]}
files[$j]=${files[$i]}
files[$i]=$f
fi
done
[ $sorted -eq 1 ] && break
done
# Delete everything except the first 5 files
for ((i=5;i<count;i++))
do
rm "${files[$i]}"
done
!/bin/bash
声明-a文件
存档*
做
文件[${#文件[@]}]=$file
完成
#气泡将文件从最新到最旧排序
declare-i j count=${#files[@]}
虽然是真的
做
declare-i=1
对于((i=1;i可以相对容易地完成,前提是您
- 支持数组的shell(正如bash所做的那样)
- 访问
测试
(可以比较两个文件的使用期限)
这是我的尝试(它可能无法处理文件名中的空格,但可以很容易地修复)
#!/bin/bash
declare -a files
for file in *
do
files[${#files[@]}]=$file
done
# Bubble sort the files from newest to oldest
declare -i i j count=${#files[@]}
while true
do
declare -i sorted=1
for ((i=1;i<count;i++))
do
let j=i-1
if [ ${files[$j]} -ot ${files[$i]} ]
then
sorted=0
f=${files[$j]}
files[$j]=${files[$i]}
files[$i]=$f
fi
done
[ $sorted -eq 1 ] && break
done
# Delete everything except the first 5 files
for ((i=5;i<count;i++))
do
rm "${files[$i]}"
done
!/bin/bash
声明-a文件
存档*
做
文件[${#文件[@]}]=$file
完成
#气泡将文件从最新到最旧排序
declare-i j count=${#files[@]}
虽然是真的
做
declare-i=1
为了((i=1;i好的,find
的主文件中有POSIX-更新的
。它-加上一些次要的编码-可以根据文件的修改时间来分隔文件。我会做一些事情,比如取第一个文件,找到更新的文件。在那里,我有两组文件-更新的和旧的。如果有比N更多的新文件,我会只对较新的集合重复这个过程,否则我会记住较新的集合,从N中减去这个数字,然后对较旧的集合重复这个过程
或者,您可以使用pax
创建存档,然后使用-o listopt
以您想要的格式提取修改时间,所有信息如下:)好吧,有一个POSIX-较新的主要用于查找
。它-通过一些次要的编码-可以根据文件的修改时间来分隔文件。我会做一些事情,比如获取第一个文件,查找较新的文件。在这里,我有两个集-较新的和较旧的。如果有比N更多的较新文件,我将被删除只对较新的集合重复这个过程,否则我会记住较新的集合,从N中减去这个数字,然后对较旧的集合重复这个过程
或者您可以使用pax
创建存档,然后使用-o listopt
以您想要的格式提取修改时间,所有信息都在这里:)
否则
人字枪
否则
停止尝试重新设计备份套件
否则
男人找| grep--ctime
男人发现| grep---删除
否则
人字枪
否则
停止尝试重新设计备份套件
否则
男人找| grep--ctime
man find | grep--delete由于ls
是查看文件时间的唯一标准工具,如果不进入特定于平台的扩展领域,就很难完成这项工作。例如,GNUstat
命令可以分析有关文件时间的信息,但它已经不再(或更少)了可移植性优于GNUfind
。还有一个问题:“您的文件名是否包含空格、制表符、换行符、表单提要等?”特别是换行符,会引起焦虑。因为ls
是唯一一个查看文件时间的标准工具,如果不进入特定于平台的扩展领域,就很难完成这项工作。例如,GNUstat
命令可以分析有关文件时间的信息,但不能再多(或少)了可移植性优于GNUfind
。还有一个问题:“您的文件名是否包含空格、制表符、换行符、表单提要等?”换行符尤其会引起焦虑。