【问题标题】:Delete script only deleting files not folders删除脚本只删除文件而不是文件夹
【发布时间】:2013-04-09 23:33:36
【问题描述】:

我有一个脚本,我每周通过一个 cron 运行该脚本,该脚本会删除我的 Web 服务器上的大量临时文件,但我刚刚注意到该脚本并未删除仍占用空间的文件夹。

修改脚本以删除文件夹的最佳方法是什么?

find /my/path/ -type d –ctime +5 –exec rm -r {} \;

#!/bin/bash
# Deletes temp files older then 5 days
DOCS='/var/www/user/docs/temp'
SCRATCH='/var/www/user/temp/scratch'

if [ -d "$DOCS" ]; then
find $DOCSJS -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt
fi
if [ -d "$SCRATCH" ]; then
find $SCRATCH -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt
fi

我的脚本实际上有 -rf 作为删除所有文件夹的标志。

需要注意的一点是,上面的文件夹是指向/mnt/sdb1/docs/js 和/mnt/sdb1/temp/scratch 的符号链接——脚本会跟随符号链接还是我应该将其硬编码到挂载上?

【问题讨论】:

  • 删除文件夹使用rm -rf普通rm不要删除文件夹
  • 抱歉我修改了问题,因为我已经有了那个标志

标签: linux bash file-io delete-directory


【解决方案1】:

您需要将其他选项传递给脚本中的rm 命令。其实你需要rm -rf。我建议去man 1 rm。

【讨论】:

    【解决方案2】:

    改变这个:

    find $DOCSJS -type f -mtime +5 -exec rm
    

    到:

    find $DOCSJS -type f -mtime +5 -exec rm -Rf
    

    【讨论】:

      【解决方案3】:

      改一下

      if [ -d "$SCRATCH" ]; then
      find $SCRATCH -type f -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt
      fi
      

      进入

      if [ -d "$SCRATCH" ]; then
      find $SCRATCH -type d -mtime +5 -exec rm -rf {} \; > /tmp/docs.txt
      fi
      

      您只能使用-type f 标志搜索文件;对目录使用-type d

      【讨论】:

      • ahhh 当然 - 会跳过文件夹根目录中的文件 - 所以应该有另外两个 if 语句只用于文件?
      • 只需跳过 if-cases 和 -type [fd],只需将 find 与 rm -rf 一起使用
      • 谢谢 _ 我正在从脚本中删除 -type
      【解决方案4】:

      目前您无法删除目录,因为find 的输出仅限于文件。您应该删除此选项,以便将旧文件和目录都传递给 rm -rf

      find $DIR -mtime +5 -exec rm -rf {} \;
      

      这将保留其中包含新文件的旧目录(但它会删除旧文件),但会删除两者都是旧的文件和目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多