Bash如果那时读取文件条件中的列表

时间:2014-03-11 14:38:14

标签: bash shell conditional conditional-statements

以下是条件:

我有一个安装了所有软件包的文件。 我有一个包含各种其他包的文件夹,但它们包括列表中的所有包,还有更多。 我需要一个bash脚本来读取文件,并检查文件夹中是否存在列表中不存在的包,然后将其删除,不需要它们,但保留该文件夹中列表中的包。

或者bash应该读取文件夹然后如果文件夹中的包不在它们rm -f或那些包中。

如果是条件语句,我熟悉写作,如果将列表中的项目变为变量或变量(循环中),我就不知道怎么做。

谢谢!

2 个答案:

答案 0 :(得分:0)

你想要这样的东西:

for file in $(ls folder) ; do
  grep -E "$file" install-list-file >/dev/null || \
    echo $file
done > rm-list

vi rm-list # view file to ensure correct
rm $(<rm_list)

有一些方法可以加快速度(使用参数替换来避免使用fork / exec),但我建议在你掌握基础知识之前避免使用花哨的shell东西[$ {file ## * /}]。此外,此脚本基本上将描述转换为脚本,并不仅仅是如何解决问题的指南。

答案 1 :(得分:0)

我会将列表中的包移动到新文件夹,删除原始文件夹,然后移回临时文件夹:

DIR=directory-name
mkdir "$DIR-tmp"
while read pkgname; do
   if [[ -f "$DIR/$pkgname" ]]; then
       mv "$DIR/$pkgname" "$DIR-tmp"
   fi
done < package-list.txt

# Confirm $DIR-tmp has the files you want first!
rm -rf "$DIR"
mv "$DIR-tmp" "$DIR"