我正在寻找通过扩展名从目录中删除文件的最佳方法。 我打算按日期去做。但现在,我正在测试它是如何工作的。 这样:
dir=/tmp/backup/
mask="jpeg jpg png gif bmp pdf"
for i in $mask; do
find $dir -name "*.$i" -type f -delete
done
还是这个?
find $dir \( -name "*.jpeg" -o -name "*.jpg" -o -name "*.png" \
-o -name "*.gif" -o -name "*.bmp" -o -name "*.pdf" \) -type f -delete
我想用最少的机器和操作系统资源来做。也许你知道其他方法。因为我会删除一年的文件。它可以称之为滞后。感谢。
答案 0 :(得分:4)
你可以使用:
# to ensure it doesn't return *.jpg if there is no .jpg file
shopt -s nullglob
# list all matching extension filea
echo *.{jpeg,jpg,png,gif,bmp,pdf}
如果您对输出感到满意,只需将echo
替换为rm
但是,如果您想使用变量,那么将所有扩展存储在变量中,然后使用find
命令将其用于此:
mask="jpeg jpg png gif bmp pdf"
find . -type f -regextype posix-extended -regex ".*\.("${mask// /|}")"