Answers:
在这些情况下,我要做的是输入
rm *
然后我按Ctrl+ X,*要扩大 *
到所有可见的文件名。
然后,我可以从列表中删除要保留的两个文件,最后执行命令行。
*
扩展文件列表不会太长的情况下才有效。:-}
Ctrl
+ Shift
+ x
+*
shopt -s extglob
@Ashot。另外,它只是文件,而不是目录,这就是为什么我删除了-rf
命令中的选项的原因。
rm !(index).html
。这将删除所有以“ .html”结尾的文件,“ index.html”除外。
您可以使用 find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
!
否定下一个表达式-name
指定文件名-maxdepth 1
将使查找过程仅处理指定的目录(find
默认情况下遍历目录)-type f
将仅处理文件(而不是目录)-delete
将删除文件更新资料
首先使用-print
而不是测试您的命令-delete
find . ! -name u ! -name p -maxdepth 1 -type f -print
-delete
刚过.
这将是灾难(将删除CWD所有文件)
find . -maxdepth 1 -type f -name '[^up]' -delete
find
是我最好的朋友,尤其是当文件太多而无法继续时
简单:
mv
您想要的文件放在较高的目录中,rm
然后再mv
返回目录。
rm
没有,-r
不会删除子目录。
类似于此答案,但不需要特殊选项,据我所知,以下是任何(模糊地)/ bin / sh类似shell(例如bash,zsh,ksh等)支持的“古老”功能
rm [^up]
rm [^up]*
?我经常做类似的事情。
这样做找不到:
ls | grep -v '(u|p)' | xargs rm
(与此处的其他地方一样,编辑:“ u”和“ v”被用作整个正则表达式的通用版本。显然,您需要谨慎锚定正则表达式,以避免匹配太多内容。)
正如其他人所建议的那样,如果您要做很多事情,那么您肯定会想要脚本。
-E
还是egrep
u
或-Matteo的所有文件p
grep -L (u|p)' * | xargs rm
where -L
表示列表文件名不包含匹配项的内容。
u
或p
不包含任何文件u
或p
。那是对的。您可以使用egrep -v '^(u|p)$'
ls | grep -v 'vuze\|progs' | xargs rm -rf
回到软盘时代,我有一个名为“ Except”的dos可执行文件,它将临时将内容移出当前目录并执行命令,因此您可以说:
除了* .txt del *。*
删除除文本文件之外的所有内容。
作为shell脚本实现,这将是一件微不足道的事情,如果这是您可能要做的两倍以上的事情,那似乎是个好主意。
对于那些更喜欢以完整的正则表达式emacs,posix-awk或posix扩展样式(请参阅查找手册页)指定任意复杂的排除模式(跨越所有受影响的文件名)的人,我建议您使用此模式。在此示例中,它在当前目录中不包含u
和p
。这对于脚本可能很方便。
find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf
-regextype
将仅适用于GNU版本
find
是find
command 的GNU扩展。-regextype
选项同样如此。此外,您的命令也会删除子目录中的文件,而原始问题明确询问了目录中的文件。
采用:
find . -type f ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
find . -type d ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
为了删除所有文件,包括目录,除了u,p和.ext文件。