根据文本文件Linux的内容删除目录

时间:2014-03-27 19:42:20

标签: linux shell directory

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

你忘记了对猫的呼叫的反引号。没有它们,rm只会删除文件cat(可能不存在,但您可能不会注意到,因为您正在使用rm -f)和{{1 }}

试试这个:

RemoveFromTop6000_reformatted.txt

或者更简单地说,

#!/bin/bash

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

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

答案 1 :(得分:1)

无需for,对于类似这样的内容,您可以像while read ...; do ... done < file这样做:

#!/bin/bash

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

答案 2 :(得分:0)

你可以尝试下面的命令,

<强>命令:

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

说明

命令将删除文件以及&#34; sample.txt&#34;中提到的目录。

注意:

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