Bash 在保存到文件的目录列表中查找

Bash 在保存到文件的目录列表中查找,bash,find,xargs,Bash,Find,Xargs,我正在使用一个小Bash脚本定期清除旧备份: FILE_LIST=`mktemp --suffix=.list` find . -maxdepth 1 -type d -mtime +30 -print0 > $FILE_LIST xargs --no-run-if-empty --null --arg-file $FILE_LIST rm -rvf rm -f $FILE_LIST 但是,问题是文件不能保证用户可写,因此rm可能无法删除它们。因此,我需要在rm之前运行chmod,以更改

我正在使用一个小Bash脚本定期清除旧备份:

FILE_LIST=`mktemp --suffix=.list`
find . -maxdepth 1 -type d -mtime +30 -print0 > $FILE_LIST
xargs --no-run-if-empty --null --arg-file $FILE_LIST rm -rvf
rm -f $FILE_LIST
但是,问题是文件不能保证用户可写,因此
rm
可能无法删除它们。因此,我需要在
rm
之前运行
chmod
,以更改其权限:

xargs --no-run-if-empty --null --arg-file $FILE_LIST chmod -vR 700
但这是低效的,因为它对找到的目录中的所有文件调用
chmod
,而绝大多数文件可能不需要chmoded。理想情况下,我想再次调用
find
,这次是使用
-perm-u+w
并仅在
$FILE\u列表中包含的目录中搜索

实现这一目标的最佳方式是什么?我基本上是在寻找一些东西来复制
xargs
--arg file
选项的功能

find . -maxdepth 1 -type d -mtime +30 -writable -exec rm -rf {} \;
然后

find . -maxdepth 1 -type d -mtime +30 -exec chmod u+w {} \; -exec rm -rf {} \;

我希望这能解决问题

有一种方法可以做到这一点-我们可以链接
xargs
-
查找
-
xargs
-
chmod

# Find unwritable files and chmod them
xargs -I {} -0r -a $FILE_LIST find {} ! -perm -u+w -print0 | xargs -0r chmod -R 700 -v
因此,完整的Bash脚本是:

FILE_LIST=`mktemp --suffix=.list`
find ~/udit65_backup/ -maxdepth 1 -iname "$PREFIX-*" -type d -mtime +$NDAYS -print0 > $FILE_LIST
# Make unwritable files... writable
xargs -I {} -0r -a $FILE_LIST find {} ! -perm -u+w -print0 | xargs -0r chmod -R 700 -v
xargs -0r -a $FILE_LIST rm -rf -v
rm -f $FILE_LIST

如果需要,可以在
chmod
之前添加
sudo
。如果sudo在这种情况下是paswdless就好了这种方法的问题是它需要两次执行
find
,但是需要chmod的文件是第一次运行
find
时找到的文件的子集。这就是为什么我想将第二次搜索限制为以前找到的那些文件。