如果满足条件则删除文件

如果满足条件则删除文件

我有以下目录树:

/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

未经测试,但它应该与此非常相似。

相关内容