![如果满足条件则删除文件](https://linux22.com/image/1478809/%E5%A6%82%E6%9E%9C%E6%BB%A1%E8%B6%B3%E6%9D%A1%E4%BB%B6%E5%88%99%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6.png)
我有以下目录树:
/Directories/
/Directories/somedir/somefile.mkv
/Directories/somefile.rar
如果 .mkv 文件存在且大于 1 GB,我正在尝试找到一种方法来删除 .rar 文件。
我已经使用find -type f -size +1000000k -name "*.mkv"
来查找文件。然后我假设-exec
或| xargs
可以帮助完成其余工作,但我不知道如何在将 find 的输出传递给 之前退出它rm
。在我的场景中,输出将是/Directories/somedir/somefile.mkv
,传递给 的命令rm
将是Directories/*.rar
我可以用-exec
或 来做到这一点吗xargs
?有没有更优雅的解决方案?
答案1
我认为不能在同一个命令中检查这两个条件find
。但是,您可以编写一个简短的脚本,进行必要的检查,并在满足条件时删除文件。
#!/bin/bash
for file in `find -type f -size +1000000k -name "*.mkv"`; do
# This would remove the mkv extension
noext=${file::-4}
# Parts of directories
parentdir=`echo $file | cut -d'/' -f2` # This would return 'Directories'
if [ -e "./$parentdir/$noext.rar" ]; then
rm -f "./$parentdir/$noext.rar"
fi
done
未经测试,但它应该与此非常相似。