检测文件大小并有条件地执行操作

检测文件大小并有条件地执行操作

在我的 中main_dir,我有很多子文件夹DFT1DFT150每个目录中都有一个名为OSZICAR.然而,其中一些文件大小为 0。

所以我想要一个脚本,进入每个文件夹并检查 的大小OSZICAR,如果它小于 10 字节的大小,则删除其DFT文件夹。

我的伪代码(不起作用)是:

for f in *; do
 cd $f
 status=(check whether OZICAR has size below 10bytes)
 cd ..
 if (status); do
  rm -r $f
 fi 
done

答案1

使用find

find DFT*/OSZICAR -size -10c -printf "%h\0" | xargs -r0 rm -r
  • find搜索DFT*名为 的目录中的所有文件OSZICAR,其文件大小小于 10 字节;表示c字节。
  • 然后打印找到文件的find目录名称(例如),以空字节终止%hDFT105\0
  • 这是通过管道xargs读取以空字节终止的行-0并调用rm -r它们中的每一个。

我建议在删除任何内容之前调用不带该部分的命令xargs,以检查一切是否正常工作。

编辑:如果您find不接受-printf(如 OSX)选项,请使用以下选项:

find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;

相关内容