有时候你需要 从目录中删除几乎所有文件,但您想保留其中一个或几个。 当它们很多时,一个接一个地繁琐。 这不是最好的选择,有很多方法可以使Linux的工作更加轻松,并且可以一次消除所有需要的方法。
例如,您可能只想删除以特定名称开头的扩展名或具有特定扩展名的扩展名,依此类推。 一切皆有可能实际上,在其他场合,我已经在LxA中显示了类似的教程。 在这里,您可以循序渐进地按照本教程操作,并以一种简单的方式删除您想要保存的所有文件。
最好的是 您将不需要安装任何程序, 使用rm和find等命令可以轻松完成此操作。 也就是说,已经在任何Linux发行版上预先安装了程序。 当然,该方法将基于找到模式并使用这些匹配项来仅删除您想要的内容。
好吧,为了消除那里 几种选择, 这些是什么…
使用rm从目录中删除文件
好吧,为了使用 rm命令 为了消除您的感觉,您必须先了解一些识别模式的方法:
- *(模式列表) -匹配零个或多个出现的指定模式
- ?(模式列表) -匹配零个或一次出现的指定模式
- +(模式列表) -匹配一次或多次出现的指定模式
- @(模式列表) -匹配指定的模式之一
- !(模式列表) -匹配除给定模式之一以外的任何内容
至 激活extglob 为了使用它们,您必须首先执行以下命令:
<br data-mce-bogus="1"> shopt -s extglob<br data-mce-bogus="1">
现在,您可以使用rm删除所需的任何内容。 例如, 从目录中删除所有文件,但不包括与名称匹配的文件 «Lxa»:
rm -v !("lxa")
您还可以指定 您不想删除的两个或多个名称。 例如,为避免删除“ lxa”和“ desdelinux”:
rm -v !("lxa"|"desdelinux")
您可以删除所有文件, 减去扩展名 .mp3。 例如:
rm -v !(*.mp3)
最后,您可以返回 禁用extglob:
shopt -u extglob
使用find从目录中删除文件
rm的另一种替代方法是 使用查找删除您喜欢的任何内容。 您可以将管道和xargs与rm一起使用,或使用-delete选项进行查找。 也就是说,通用语法为:
find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I {} rm [opciones] {}
例如,假设您想要 从目录中删除所有带有扩展名的文件 .jpg,您可以使用以下两个命令之一,因为它们都得到相同的结果:
find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I {} rm -v {}
相反,如果您想要 添加一些额外的模式,您也可以。 例如,假设您不想从目录中删除.pdf或.odt:
find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete
当然,您可以使用| 和上一个示例中的xargs一样。 顺便说一句,我们已经使用 -不可否认, 但是您可以删除它以使其正面,即删除匹配的模式而不是排除它们。
使用GLOBIGNORE变量从目录中删除文件
最后,有 另一种选择 查找并rm,它使用环境变量指向要删除或排除的文件。 例如,假设您要删除名为Downloads的目录中的所有文件,并保存.pdf,.mp3和.mp4文件。 在这种情况下,您可以执行以下操作:
cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE