Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何删除名称小于…的文件夹。。。?_Bash_Filesystems - Fatal编程技术网

Bash 如何删除名称小于…的文件夹。。。?

Bash 如何删除名称小于…的文件夹。。。?,bash,filesystems,Bash,Filesystems,在我的服务器上,我在日期之后有一堆存档文件夹名:yyyy-mm-jj这允许轻松地对文件夹进行排序并查找相关数据 我想删除给定数据之前完成的所有存档。对于我的文件夹命名,自然排序顺序与常规排序相同,因此我可以依赖通常的bash构造: if [ $foldername -lt "yyyy-mm-jj" ]; then rm -r $foldername fi 有更有效的方法吗?[$foldername-lt“yyyy-mm jj”]将始终为false,因为-lt是一个数字运算符:您正在比较

在我的服务器上,我在日期之后有一堆存档文件夹名:
yyyy-mm-jj
这允许轻松地对文件夹进行排序并查找相关数据

我想删除给定数据之前完成的所有存档。对于我的文件夹命名,自然排序顺序与常规排序相同,因此我可以依赖通常的bash构造:

if [ $foldername -lt "yyyy-mm-jj" ]; then
    rm -r $foldername
fi
有更有效的方法吗?

[$foldername-lt“yyyy-mm jj”]
将始终为false,因为
-lt
是一个数字运算符:您正在比较的字符串不是数字,因此它们都被视为0。使用
操作符来比较字符串(这是一个ksh/bash/zsh功能)。请注意,只有字符串运算符,没有
=

通配符扩展按字典顺序返回匹配的名称。因此,要对最旧的文件执行操作,请循环浏览这些文件,并在发现过新的文件时中断

for dir in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
  if ! [[ $dir < $min_date_to_keep ]]; then break; fi
  rm -r "$dir"
done
[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]中的目录的
;做
如果![[$dir<$min_date_to_keep];然后打破;fi
rm-r“$dir”
完成

不,这似乎是最好的方法。您可以使用find with-mtime查找旧文件/文件夹。速度没有问题。我只寻求优雅的结构:)+1,主要是因为这还可以确保只检查正确命名的文件夹,并且随机文件夹被删除的风险较小(例如,由于某些错误,脚本在错误的目录上运行)。