我有一个类似的目录结构
/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
我需要将包含文件"的所有目录作为目标;CCD_ 1";并删除那些目录及其内容。在我的结构中,想要的最终结果是:
/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
行进行注释,这只是为了向您显示正在处理的文件/目录