如何删除一切除了几个文件?

在UNIX shell中,我应该如何从一个目录中除去一定数量的文件?

例如,我将如何删除每个文件和文件夹,但文件夹foo

如果还有一个DOS shell的等价物,那它是什么?

首先,testing:

findpath到文件夹-maxdepth 1! -iname'excludeme'-and -type f -exec ls“{}”\;

然后:

findpath到文件夹-maxdepth 1! -iname'excludeme'-and -type f -exec rm“{}”\;

-maxdepth 1表示仅查看当前文件夹(并且它需要是第一个选项)

! -iname(或-name)表示不包含任何与您想要保留的内容相匹配的内容。

-type f确保你在当前文件夹中没有任何目录。

 find . -maxdepth 1 -path ./folder -prune -o -exec rm -rf '{}' ';' 

一定要先用一些testing数据仔细检查一下!

为了匹配所有的东西,但是通常被称为逆匹配 。 扩展文件名是你使用globbing的shell本身。 如果您打算在shell之外调用一个程序,您可能会希望像人们提到的那样查找它。

如果启用扩展匹配,则可以使用较新的bash进行逆匹配。 例如,要匹配名称中没有foo或bar的所有内容:

 shopt -s extglob echo !(*foo*|*bar*) 

或者只是没有foo的一切:

 shopt -s extglob echo !(*foo*) 

如果foo中没有打开的文件,则可以将其移动,删除其他所有内容,然后将其移回。

我不认为在bash的globbing中有一个简单的“负面”匹配,尽pipe你可以使用find的正则expression式和iregex匹配来制作一个匹配。

编辑:只是一个想法…

 ls | grep -v ^./foo$ 

将列出除foo以外的所有文件,以便您可以使用

 ls | grep -v ^./foo$ | xargs rm 

尽pipe如果任何文件/目录名称包含空格,将会有问题。
你可以根据需要改变传递给grep的正则expression式,如果你想匹配一个模式而不是单个文件/目录,或者多次传递grep:

 ls | grep -v ^./foo$ | grep -v ^./bar$ | xargs rm -rf 

在添加xargs rm -rf步骤之前,要非常小心地testingfind + grep序列的输出。

再次编辑: lsfind . -maxdepth 1 find . -maxdepth 1 ,可能更简单。

Windows cmd.exe版本

打印C:\中除“foo”之外的所有目录的名称:

 @echo off FOR /D %A IN (C:\*) DO (IF /I NOT "%A"=="C:\foo" (echo %A)) 

打印C:\中除“foo”(忽略文件扩展名)之外的所有文件的名称:

 @echo off FOR %A IN (C:\*.*) DO (IF /I NOT "%~nA"=="foo" (echo %A)) 

打印C:\中所有文件的名称,但带有“bar”的扩展名除外:

 @echo off FOR %A IN (C:\*.*) DO (IF /I NOT "%~xA"==".bar" (echo %A)) 

打印C:\中所有文件的名称,除了那些名为“foo.bar”的文件:

 @echo off FOR %A IN (C:\*) DO (IF /I NOT "%~nxA"=="foo.bar" (echo %A)) 

将“echo”命令更改为你想要做的任何事情 – 例如'del'

以上所有情况都是不敏感的 – 删除'/我'来改变这一点。

input'for /?' 有关FOR的%〜语法的更多详细信息。

如果它是一个小列表,我会做这样的事情:

ls -1 | egrep -v“(file2 | file8)”| xargs rm -rf

其中获取文件列表,然后greps为正则expression式排除您要保留的文件,并删除一切。

您应该通过closuresxargs部分来validation您是否拥有正确的文件集,从而对此进行明确的testing。

还有一个更随意的解决scheme,它是:

  1. mkdir ../temp
  2. 珍贵的珍贵的珍贵的3 ../temp/ (或mv而不是ln)
  3. rm -rf *
  4. ln ../temp/*。
  5. rmdir ../temp

缺点是你的珍贵文件暂时被取代。 如果您的宝贵文件必须全部可用,此解决scheme将不适用。

但是,这种方法的优点是您可以在步骤2之后validation您的珍贵文件是否安全。 如果涉及到隐藏的文件或子目录,这就特别有意义,这会增加这里提出的其他方法出错的可能性。