Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix 根据日期删除目录_Unix_Date - Fatal编程技术网

Unix 根据日期删除目录

Unix 根据日期删除目录,unix,date,Unix,Date,我正在写zsh脚本,其中我必须从当前日期中获得前一天的90天,即我必须从当前日期中减去90天。然后,我必须检查名称为不同日期的文件夹。我必须将目录日期与减去的日期进行比较,如果结果大于减去的日期,我必须删除目录 例如: 假设当前日期=20131130(yyyymmdd) 减去日期=当前日期-90天 假设有一个文件夹20130621 现在,应该将此文件夹名称与减去的日期进行比较。如果大于减去的日期,则我必须删除该目录 find path -type d -ctime +90 -exec rm -r

我正在写zsh脚本,其中我必须从当前日期中获得前一天的90天,即我必须从当前日期中减去90天。然后,我必须检查名称为不同日期的文件夹。我必须将目录日期与减去的日期进行比较,如果结果大于减去的日期,我必须删除目录

例如:

假设当前日期=20131130(yyyymmdd)

减去日期=当前日期-90天

假设有一个文件夹20130621

现在,应该将此文件夹名称与减去的日期进行比较。如果大于减去的日期,则我必须删除该目录

find path -type d -ctime +90 -exec rm -rf {} \;
应该找到所有超过90天的目录,并在其上使用rm-rf

小心使用该命令,尽管您可能希望首先使用此命令测试它

find path -type d -ctime +90 -exec echo {} \;
<>为了保持某些文件夹考虑> Mtime<代码>而不是<代码> -cTime/Cuff>并经常触摸文件夹

用要扫描和删除的实际路径替换上面的
path

解释

find
是命令

path
是要扫描的根目录

-类型d
表示仅查找目录

-ctime+90
表示创建时间早于90天

-exec rm-rf{}表示递归删除并强制删除找到的项目

-mtime
是修改的时间

第二个命令将列出所有将被删除的文件夹,以便在测试时运行更安全

应该找到所有超过90天的目录,并在其上使用rm-rf

小心使用该命令,尽管您可能希望首先使用此命令测试它

find path -type d -ctime +90 -exec echo {} \;
<>为了保持某些文件夹考虑> Mtime<代码>而不是<代码> -cTime/Cuff>并经常触摸文件夹

用要扫描和删除的实际路径替换上面的
path

解释

find
是命令

path
是要扫描的根目录

-类型d
表示仅查找目录

-ctime+90
表示创建时间早于90天

-exec rm-rf{}表示递归删除并强制删除找到的项目

-mtime
是修改的时间


第二个命令将列出所有将被删除的文件夹,以便在测试时运行时更加安全

您可以使用
date
命令查找比当前日期早90天的日期。以下脚本应提供需要删除的目录列表:

del=$(date --date="90 days ago" +%Y%m%d)
for i in `find . -type d -name "2*"`; do
  (($del > $(basename $i))) && echo "delete $i" || echo "dont delete $i"
done
要执行目录的实际删除,可以将第三行替换为以下内容:

  (($del > $(basename $i)))  && rm -rf $i
例如,如果当前目录包含以下文件夹:

$ ls -1F
20120102/
20130104/
20130302/
20130402/
20130502/
20130602/
20130702/
执行上述脚本将告诉您:

$ bash cleanup
delete ./20130302
delete ./20130104
delete ./20120102
delete ./20130402
dont delete ./20130702
dont delete ./20130502
dont delete ./20130602

您可以使用
date
命令查找比当前日期早90天的日期。以下脚本应提供需要删除的目录列表:

del=$(date --date="90 days ago" +%Y%m%d)
for i in `find . -type d -name "2*"`; do
  (($del > $(basename $i))) && echo "delete $i" || echo "dont delete $i"
done
要执行目录的实际删除,可以将第三行替换为以下内容:

  (($del > $(basename $i)))  && rm -rf $i
例如,如果当前目录包含以下文件夹:

$ ls -1F
20120102/
20130104/
20130302/
20130402/
20130502/
20130602/
20130702/
执行上述脚本将告诉您:

$ bash cleanup
delete ./20130302
delete ./20130104
delete ./20120102
delete ./20130402
dont delete ./20130702
dont delete ./20130502
dont delete ./20130602

删除前列出目录

find . -type d -ctime +60  -ls
find . -type f -ctime +60  -ls
删除前列出文件

find . -type d -ctime +60  -ls
find . -type f -ctime +60  -ls
删除当前目录中的目录

 find . -type d -ctime +60 -exec rm -rf {} \;
  find . -type f -ctime +60 -exec rm -rf {} \;
删除当前目录中的文件

 find . -type d -ctime +60 -exec rm -rf {} \;
  find . -type f -ctime +60 -exec rm -rf {} \;

删除前列出目录

find . -type d -ctime +60  -ls
find . -type f -ctime +60  -ls
删除前列出文件

find . -type d -ctime +60  -ls
find . -type f -ctime +60  -ls
删除当前目录中的目录

 find . -type d -ctime +60 -exec rm -rf {} \;
  find . -type f -ctime +60 -exec rm -rf {} \;
删除当前目录中的文件

 find . -type d -ctime +60 -exec rm -rf {} \;
  find . -type f -ctime +60 -exec rm -rf {} \;
您还可以使用以下命令按日期删除当前目录中的所有文件

[jamshi@cpanel~]$rm-rf
ls-l | grep'Jul 19 15:32'| tr-s'| cut-d'-f9

您还可以使用以下命令按日期删除当前目录中的所有文件


[jamshi@cpanel~]$rm-rf
ls-l | grep'Jul 19 15:32'| tr-s'| cut-d'-f9

出于实际目的,您可能还对3个月而不是90天感兴趣。这将是相当微不足道的,但每个月不会有30天。这是一个客户端规范,文件夹在90天后被删除。查看目录名(计算机上没有“文件夹”),计算当天午夜的纪元时间。添加90*24*3600(忽略夏令时偏移)。与当前时间进行比较。必要时删除。出于实际目的,您可能会对3个月而不是90天感兴趣。这将是相当微不足道的,但每个月不会有30天。这是一个客户端规范,文件夹在90天后被删除。查看目录名(计算机上没有“文件夹”),计算当天午夜的纪元时间。添加90*24*3600(忽略夏令时偏移)。与当前时间进行比较。根据需要删除。嗨。。。你能给我解释一下命令吗?我是说国旗和它们的用途?实际上,我对unix是新手。比较是基于目录名,而不是基于ctime。也许在这种情况下它们是等效的,也许ctime实际上比名称更合适,但也许不是。可以根据文件夹名称删除文件夹吗?但不是在创造的时间?这是为了测试目的。我创建了一些名为20120304、20130624、20120718等的文件夹。这些文件夹是刚刚创建的。因此,我想根据文件夹名称而不是创建时间进行删除。使用
touch-m(目录)(时间戳)
修改修改的时间更改括号中的部分或触摸-mt yymddhhmm以该格式进行一段时间,请查看手册页了解更多信息是的,它们是真实日期。如果有人打开了超过90天的文件夹并进行了一些修改,该怎么办?创作时间会改变吗?嗨。。。你能给我解释一下吗