我需要删除目录中的所有文件,但排除其中一些文件。例如,在包含 files 的目录中a b c ... z
,我需要删除除u
and之外的所有内容p
。是否有捷径可寻?
spa*_*kie 145
为了rm
所有,但u,p
在bash只需键入:
rm !(u|p)
Run Code Online (Sandbox Code Playgroud)
这需要设置以下选项:
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
查看更多:glob - Greg's Wiki
Der*_*ler 109
在这些情况下我所做的是输入
rm *
Run Code Online (Sandbox Code Playgroud)
然后我按Ctrl+ X,*要扩大 *
到所有可见的文件名。
然后我可以从列表中删除我喜欢保留的两个文件,最后执行命令行。
Mat*_*teo 76
您可以使用 find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
Run Code Online (Sandbox Code Playgroud)
!
否定下一个表达式-name
指定文件名-maxdepth 1
将使查找过程仅指定目录(find
默认情况下遍历目录)-type f
将只处理文件(而不是例如目录)-delete
将删除文件更新
首先使用-print
而不是测试您的命令-delete
find . ! -name u ! -name p -maxdepth 1 -type f -print
Run Code Online (Sandbox Code Playgroud)use*_*581 44
简单的:
mv
把你想要的文件放在一个上层目录下,rm
然后mv
把它们放回目录。
hlo*_*dal 16
与此答案有些相似,但不需要特殊选项,据我所知,以下是任何(模糊)/bin/sh 类似 shell(例如 bash、zsh、ksh 等)支持的“古老”功能
rm [^up]
Run Code Online (Sandbox Code Playgroud)
小智 15
没有找到就这样做:
ls | grep -v '(u|p)' | xargs rm
Run Code Online (Sandbox Code Playgroud)
(编辑:“u”和“v”,就像这里的其他地方一样,被用作整个正则表达式的通用版本。显然,你需要小心地锚定你的正则表达式以避免匹配太多东西。)
如果您要像其他人建议的那样做很多事情,您肯定会想要一个脚本。
在 zsh 中:
setopt extended_glob # probably in your .zshrc
Run Code Online (Sandbox Code Playgroud)
然后
rm ^(u|p)
Run Code Online (Sandbox Code Playgroud)
或者
rm *~(u|p)
Run Code Online (Sandbox Code Playgroud)
第二个甚至会工作,如果你有^
在$histchars
对历史替换,当然你可以前放一个任意水珠~
。
GLOBIGNORE 采用冒号分隔的列表
GLOBIGNORE=u:p
rm *
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
153668 次 |
最近记录: |