Bash 删除不包含';没有具有特定名称的子目录
我想删除所有没有Bash 删除不包含';没有具有特定名称的子目录,bash,find,Bash,Find,我想删除所有没有目录b的目录。树结构如下所示: --directory1 | directoryA---directoryB | directoryC | directoryD---directoryB 我在目录1中尝试了以下脚本: du -a -h --max-depth=1 | sort -hr 所以我知道我要删除的所有目录的大小都是8k。如果我在目录1之外尝试下面的脚本,它
目录b
的目录。树结构如下所示:
--directory1
|
directoryA---directoryB
|
directoryC
|
directoryD---directoryB
我在目录1中尝试了以下脚本:
du -a -h --max-depth=1 | sort -hr
所以我知道我要删除的所有目录的大小都是8k。如果我在目录1之外尝试下面的脚本,它几乎显示了目录中的所有内容
find directory1 -maxdepth 1 -type d -size 8
我认为我的安全选择是删除没有directoryB
的目录。我该怎么做呢?我想你不需要找到这个。一个简单的循环就可以了
for d in directory1/*/; do
if ! test -d "${d}directoryB"; then
echo rm -r "${d}"
fi
done
如果您对输出满意,请删除echo。使用和:
查找。
在当前工作目录中查找-仅键入d
文件夹-深度
深度优先模式-深度1
强制深度为1-exec测试-e“{}/dirB/”\代码>如果此文件不包含dirB
-打印
打印路径find-类型d-深度-深度1-exec测试-e“{}/dirB/”\-打印
如果输出正常,则将
-print
替换为-exec rm-r“{}”代码>:
find-类型d-深度-深度1-exec测试-e“{}/dirB/”\-exec rm-rf{}\;
例如:
$tree
.
|--迪拉
|“迪布
|--迪尔克
|`--dirX
`--迪德
`--肮脏的
6个目录,0个文件
$
$
$find-类型d-深度-深度1-exec测试-e“{}/dirB/”\-exec rm-rf{}\;
$
$tree
.
|--迪拉
|“迪布
`--迪德
`--肮脏的
4个目录,0个文件
$
它们是否始终处于同一级别?或者它们可能处于不同的深度?我看到您正在使用find的-maxdepth 1
,但那是在您检查尺寸时。如果它们始终处于同一水平,@oguz解决方案是完美的。如果没有,请添加shopt-s globstar
并使用directory1/***/
在可变深度执行相同的操作。您可能希望在之后关闭globstar-set+o globstar
@PaulHodges,是的,它们始终处于同一级别。这表示查找:路径必须位于GNU find的表达式“1”之前。仍在调试深度问题,现在应予以修复。仍然是相同的错误。你有什么版本的find?我的是find(GNU findutils)4.7.0
.Mm,不确定是哪个版本,find--version
返回非法选项
。似乎是一个相当旧的版本,有什么建议来获得实际的版本吗<代码>人工查找
不显示任何版本信息,仅显示发布日期:2011年9月28日BSD.BSD find then。我想这个答案在MacOS和BSD发行版上很好,但在Linux上不行