这是情况。
我有一个目录,其中包含许多具有不同扩展名的文件。我想删除除具有特定名称的文件之外的所有文件。
这可以使用 GUI 轻松完成,方法是全选并按下ctrl和取消选择相关文件。
这正是我想要的,但是如何从命令行执行此操作?
例如: dirA 包含以下文件:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Run Code Online (Sandbox Code Playgroud)
我想删除所有文件,只保留名为a.txt.
May*_*hux 97
我带来了这个简单的好命令:
rm !(a.txt)
Run Code Online (Sandbox Code Playgroud)
您可以使用 !作为否定
首先用 echo 测试 glob,即
echo !(a.txt)
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,因为bash您可能需要启用它
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
如果您想同时保留a.txt和b.txt,您可以使用!(a.txt|b.txt)或!([ab].txt)。
编辑:
使rm递归工作只是增加-r像
rm -r !(a.txt)
Run Code Online (Sandbox Code Playgroud)
而且,它正在处理文件夹。只需要把名字改成目录名即可,比如fora_dir
rm -r !(a_dir)
Run Code Online (Sandbox Code Playgroud)
cos*_*bur 22
你可以试试这个命令:
find . \! -name 'a.txt' -delete
Run Code Online (Sandbox Code Playgroud)
但是你需要小心,因为 find 命令是递归的。
Sha*_*tam 12
您可以在终端中执行此操作:
cd dirA
export GLOBIGNORE=a.txt
rm *
export GLOBIGNORE=
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令:
find ! -name 'a.txt' -type f -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)
这将-type f在当前目录中查找文件 ( ) 中除文件a.txt( ! -name 'a.txt)之外的文件,然后将其删除 ( -exec rm -f {} +)
使用find和xargs
find folder -type f -not -name 'a.txt' -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
要排除多个事物:
find folder -type f -not -name 'a.txt' -not -name 'b.txt' -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
这也适用于通配符:
find folder -type f -not -name '*.png' -not -name 'b.txt' -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
要在当前文件夹中搜索,请使用.“文件夹”。
| 归档时间: |
|
| 查看次数: |
81080 次 |
| 最近记录: |