![如何从特定文件夹中删除除一个命名文件之外的所有文件](https://linux22.com/image/872103/%E5%A6%82%E4%BD%95%E4%BB%8E%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E5%88%A0%E9%99%A4%E9%99%A4%E4%B8%80%E4%B8%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.png)
情况如下。
我有一个目录,其中包含许多具有不同扩展名的文件。我想删除除具有特定名称的文件之外的所有文件。
可以使用 GUI 轻松完成此操作,通过选择全部并按下ctrl并取消选择相关文件。
这正是我想要的,但是我如何从命令行做到这一点?
例如: dirA 包含以下文件:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
我想删除所有文件,只保留名为 的文件a.txt
。
答案1
我得到了这个简单易懂的命令:
rm !(a.txt)
你可以使用 ! 作为否定
首先用 echo 测试 glob,即
echo !(a.txt)
如果不起作用,bash
你可能需要使用
shopt -s extglob
如果您想保留a.txt
和b.txt
,则可以使用!(a.txt|b.txt)
或!([ab].txt)
。
编辑:
要使rm
工作递归,只需-r
添加
rm -r !(a.txt)
而且,它还可以与文件夹一起使用。只需将名称更改为目录名称,例如a_dir
rm -r !(a_dir)
答案2
你可以尝试这个命令:
find . \! -name 'a.txt' -delete
但您需要小心,因为 find 命令是递归的。
答案3
您可以在终端中执行此操作:
cd dirA
export GLOBIGNORE=a.txt
rm *
export GLOBIGNORE=
答案4
您可以使用以下命令:
find ! -name 'a.txt' -type f -exec rm -f {} +
-type f
这将在当前目录中查找除文件( )之外的文件a.txt
(! -name 'a.txt
),然后将其删除(-exec rm -f {} +
)