【问题标题】:Remove directory based on content of text file, Linux根据文本文件的内容删除目录,Linux
【发布时间】:2014-05-07 00:25:31
【问题描述】:

我有一个充满子目录的目录,如下所示:

Track_0000111
Track_0004444
Track_0022222
Track_0333333
Track_5555555

如果某些目录包含在“RemoveFromTop6000_reformatted.txt”文件的列表中,我想删除它们

文本文件的内容如下所示:

Track_0000111
Track_0022222
Track_0333333

我尝试编写一个小脚本来处理这个问题,但它似乎不起作用:

#!/bin/bash

    for file in cat RemoveFromTop6000_reformatted.txt; do
        rm -rfv $file
    done

不幸的是,这只是删除了文本文件,而不是目录。有什么建议吗?

谢谢!

【问题讨论】:

  • 那么我们的回答解决了您的问题吗?

标签: linux shell directory


【解决方案1】:

您忘记了调用 cat 的反引号。没有它们,rm 将简单地删除文件cat(可能不存在,但您可能不会注意到,因为您使用的是rm -f)和RemoveFromTop6000_reformatted.txt

试试这个:

#!/bin/bash

for file in `cat RemoveFromTop6000_reformatted.txt`; do
    rm -rv "$file"
done

或者,更简单地说,

rm -rv `cat $file`

(但这仅在目录名称不包含空格时才有效)。

【讨论】:

  • 谢谢!工作得很好。最终移动目录而不是删除它们,但这个一般概念是我需要的。缺少的反引号是关键。谢谢!
【解决方案2】:

无需for,对于这样的事情,您可以像这样发送while read ...; do ... done < file

#!/bin/bash

while read file
    rm -rfv "$file"
done < RemoveFromTop6000_reformatted.txt

【讨论】:

    【解决方案3】:

    你可以试试下面的命令,

    命令:

      sed 's/^/"/g' sample.txt | sed 's/$/"/g' | xargs rm -rfv
    

    说明:

    命令将删除“sample.txt”中提到的文件和目录。

    注意:

    • 在您的情况下,请确保“RemoveFromTop6000_reformatted.txt” 仅包含目录名称。
    • 如果目录名称包含空格,命令也将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多