在Linuxterminal中,如何删除一个或两个文件夹以外的所有文件?
例如。
我有一个目录中的100个图像文件和一个.txt文件。 我想删除除.txt文件以外的所有文件。
NTFS稀疏文件数据运行($ UsnJrnl)
BeagleBone Black如何被用作大容量存储设备?
在cygwin mkfs.ext2不工作
IOzone输出中的“Min xfer”和“throughput”的含义是什么?
在unix系统上用pythonsorting文件
Overlayfs:“特殊设备覆盖不存在”
如何隐藏/取消隐藏文件,而不删除Windows上的C ++中的其他属性
如何使文件中的漏洞在Linux中通过c擦除数据
从目录中,列出文件,过滤掉所有不包含“文件保留”的文件,并删除列表中剩下的所有文件。
ls | grep -v 'file-to-keep' | xargs rm
为了避免文件名空间的问题(记住永远不要在文件名中使用空格),使用find和-0选项。
find 'path' -maxdepth 1 -not -name 'file-to-keep' -print0 | xargs -0 rm
或者混合两者,使用grep选项-z来管理-print0名称
一般来说,使用grep进行倒排模式搜索应该能够完成这项工作。 由于您没有定义任何模式,我只是给你一个通用的代码示例:
ls -1 | grep -v 'name_of_file_to_keep.txt' | xargs rm -f
ls -1 1每行列出一个文件,以便grep可以逐行搜索。 grep -v是倒转的标志。 所以任何匹配的模式都不会被删除。
对于多个文件,你可以使用egrep:
ls -1 | grep -E -v 'not_file1.txt|not_file2.txt' | xargs rm -f
问题更新后更新:我假设你愿意删除当前文件夹中不以.txt结尾的文件。 所以这也应该工作:
find . -maxdepth 1 -type f -not -name "*.txt" -exec rm -f {} ;
找到支持一个-delete选项,所以你不需要-exec 。 你也可以传递多组-not -name somefile -not -name otherfile
user@host$ ls 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt josh.pdf keepme user@host$ find . -maxdepth 1 -type f -not -name keepme -not -name 8.txt -delete user@host$ ls 8.txt keepme
使用not修饰符移除not删除的file(s)或pattern(s) ,可以修改传递给-maxdepth的1以指定要从中删除多少个子目录
find . -maxdepth 1 -not -name "*.txt" -exec rm -f {} ;
你也可以这样做:
find -maxdepth 1 ! -name "*.txt" -exec rm -f {} ;
在bash中,你可以使用:
$ shopt -s extglob # Enable extended pattern matching features $ rm !(*.txt) # Delete all files except .txt files
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。