gpt4 book ai didi

bash - shell 脚本 : How to delete all files in a directory except ones listed in a file?

转载 作者:行者123 更新时间:2023-11-29 09:00:40 25 4
gpt4 key购买 nike

我有一个目录(~/temp/)包含很多文件和子目录,在某些目录中,它们可能包含其他文件和子目录。此外,在目录(~/temp/)中,它包含一个名为kept.txt 的特殊txt 文件,它列出了中包含的一些直接文件和子目录code>~/temp/,现在我想删除 ~/temp/ 下所有其他未在 kept.txt 文件中列出的文件和目录, 如何用 shell 命令做到这一点,越简单越好。

例如

目录如下:

$ tree temp/ -F
temp/
├── a/
├── b/
├── c/
│   ├── f2.txt
│   └── z/
├── f1.txt
└── kept.txt

kept.txt的内容是:

$ more kept.txt
b
kept.txt

对于这种情况:

  1. 我想删除a/c/f1.txt。对于c/,目录本身和所有子内容(文件和目录)将被删除。
  2. kept.txt中,格式是每行一个项目(文件或目录)。

最佳答案

使用 extglob你可以这样做:

cd temp
shopt -s extglob

rm -rf !($(printf "%s|" $(<kept.txt)))

printf "%s|" $(<kept.txt)将提供输出为 b|kept.txt|!(...)是一个 extended glob pattern否定匹配。

关于bash - shell 脚本 : How to delete all files in a directory except ones listed in a file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32348666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com