Unix命令删除给定文件的同级目录和父目录



我有一个类似的目录结构

/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
  • 像这样将findwhile一起使用可确保它能与所有文件名一起使用(请参阅https://mywiki.wooledge.org/BashFAQ/001)
  • 您可以运行find . -type f -name target-file.php -print来查看文件列表
  • dirname会删除文件名,因此只剩下目录名
  • /bin/rm -fr删除目录
  • 您可以对echo行进行注释,这只是为了向您显示正在处理的文件/目录

最新更新