无法删除FileA以外的其他文件夹

如何删除文件夹中除FileA之外的所有其他内容,甚至是隐藏文件? 我使用Ubuntu。

我尝试了以下失败

rm [^fileA] 

Solutions Collecting From Web of "无法删除FileA以外的其他文件夹"

使用extglob 。 假设FileA是一个常规文件(即不是以.开头),那么你可以这样做:

 shopt -s extglob # Enable extglob rm !(FileA) .* # Remove all regular files not named FileA and all hidden files 

如果FileA是一个隐藏文件,这将不起作用,因为!( pattern )构造只创建一个不匹配模式的所有常规文件的列表。

 find . -not -name fileA -exec rm {} \; 

请注意,这只会删除文件,而不是文件夹。 相信我,你不想删除那样的文件夹。

你也可以交互地做,

 rm -i * .* 

*是用于所有文件(隐藏文件除外)。 。*是用于所有隐藏的文件

 gene@vmware:/tmp/test$ ls -al total 8 drwxr-xr-x 2 gene gene 4096 2009-03-11 12:51 . drwxrwxrwt 12 root root 4096 2009-03-11 12:51 .. -rw-r--r-- 1 gene gene 0 2009-03-11 12:51 fileA -rw-r--r-- 1 gene gene 0 2009-03-11 12:51 .fileB gene@vmware:/tmp/test$ rm -i * .* rm: remove regular empty file `fileA'? n rm: cannot remove directory `.' rm: cannot remove directory `..' rm: remove regular empty file `.fileB'? y gene@vmware:/tmp/test$ ls -al total 8 drwxr-xr-x 2 gene gene 4096 2009-03-11 12:51 . drwxrwxrwt 12 root root 4096 2009-03-11 12:51 .. -rw-r--r-- 1 gene gene 0 2009-03-11 12:51 fileA 

对于多个文件,以下操作将删除名称中包含FileA或FileB的文件。

 for file in * do if [ x`echo $file | grep -ve "\(FileA\|FileB\)"` == x ]; then rm $file fi done 

它在一长串文件中更有用。 如果这只是一个简短的列表,我会与CoverosGene的回应。

基于解析目录列表的大多数方法很可能是错误的。

如果你有对父目录的写权限,并且你需要的文件在子目录foo ,怎么样:

 % mkdir bar % mv foo/fileA bar % rm -rf foo % mv bar foo 

即让你的重要文件(S)的地狱第一!