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

问题描述 投票:0回答:1

我有这样的目录结构

/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
)而不是同级文件或父目录。

unix command
1个回答
0
投票

使用这个:

#!/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
    行,这只是为了向您展示正在处理的文件/目录。
© www.soinside.com 2019 - 2024. All rights reserved.