我有以下目录树:
/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
未经测试,但它应该与此非常相似。