删除脚本只删除文件而不是文件夹

时间:2013-04-17 09:12:58

标签: linux bash file-io delete-directory

我有一个脚本,我每周都会通过一个cron删除我的网络服务器上的临时文件,但我只是注意到脚本没有删除仍占用空间的文件夹。

最好修改脚本以删除文件夹?

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的符号链接 - 脚本是否遵循符号链接,或者我应该将其硬编码到挂载?

4 个答案:

答案 0 :(得分:0)

您需要在脚本中向rm命令传递其他选项。实际上你需要rm -rf。我建议你去man 1 rm

答案 1 :(得分:0)

改变这个:

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

为:

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

答案 2 :(得分:0)

更改此

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作为目录

答案 3 :(得分:0)

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

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

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