如何删除目录中除一个文件外的所有文件

删除Linux文件

有时候你需要 从目录中删除几乎所有文件,但您想保留其中一个或几个。 当它们很多时,一个接一个地繁琐。 这不是最好的选择,有很多方法可以使Linux的工作更加轻松,并且可以一次消除所有需要的方法。

例如,您可能只想删除以特定名称开头的扩展名或具有特定扩展名的扩展名,依此类推。 一切皆有可能实际上,在其他场合,我已经在LxA中显示了类似的教程。 在这里,您可以循序渐进地按照本教程操作,并以一种简单的方式删除您想要保存的所有文件。

最好的是 您将不需要安装任何程序, 使用rm和find等命令可以轻松完成此操作。 也就是说,已经在任何Linux发行版上预先安装了程序。 当然,该方法将基于找到模式并使用这些匹配项来仅删除您想要的内容。

好吧,为了消除那里 几种选择, 这些是什么…

使用rm从目录中删除文件

好吧,为了使用 rm命令 为了消除您的感觉,您必须先了解一些识别模式的方法:

  • *(模式列表) -匹配零个或多个出现的指定模式
  • ?(模式列表) -匹配零个或一次出现的指定模式
  • +(模式列表) -匹配一次或多次出现的指定模式
  • @(模式列表) -匹配指定的模式之一
  • !(模式列表) -匹配除给定模式之一以外的任何内容

激活extglob 为了使用它们,您必须首先执行以下命令:

<br data-mce-bogus="1">

shopt -s extglob<br data-mce-bogus="1">

眼睛! 我没有指定它,但是假设您具有执行这些操作的权限,并且在执行rm命令时位于该目录中。 请注意这一点,因为如果在其他路径中运行它,最终可能会删除不需要的文件。 也就是说,在执行这些命令之前,请确保已使用cd输入所需的目录。

现在,您可以使用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


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。