我有这样的目录结构
/home
/dir-1
some-file.php
/dir-2
sibling.php
target-file.php
/dir-3
/dir-4
other-sibling.php
sibling.php
target-file.php
/dir-5
target-file.php
我需要定位包含文件“
target-file.php
”的所有目录,并删除这些目录及其内容。在我的结构中,最终想要的结果是:
/home
/dir-1
some-file.php
/dir-3
我正在努力:
rm -rf /home/*/target-file.php
但它只是删除该文件(
target-file.php
)而不是同级文件或父目录。
使用这个:
#!/bin/bash
find . -type f -name target-file.php -print0 | while IFS= read -r -d '' line
do
echo "$line"
/bin/rm -fr "$(dirname "$line")"
done
find
与 while
一起使用,可确保它适用于所有文件名(请参阅 https://mywiki.wooledge.org/BashFAQ/001)。find . -type f -name target-file.php -print
来查看文件列表。dirname
删除文件名,这样您就只剩下目录名称。/bin/rm -fr
删除目录。echo
行,这只是为了向您展示正在处理的文件/目录。