在我的 中main_dir
,我有很多子文件夹DFT1
,DFT150
每个目录中都有一个名为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
目录名称(例如),以空字节终止%h
DFT105
\0
- 这是通过管道
xargs
读取以空字节终止的行-0
并调用rm -r
它们中的每一个。
我建议在删除任何内容之前调用不带该部分的命令xargs
,以检查一切是否正常工作。
编辑:如果您find
不接受-printf
(如 OSX)选项,请使用以下选项:
find DFT*/OSZICAR -size -10c -exec sh -c 'rm -r $(dirname "$1")' sh {} \;