无法删除除FileS之外的文件夹中的所有其他内容

时间:2009-03-11 16:43:40

标签: linux

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

我尝试了以下不成功的

rm [^fileA]

5 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

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

如果FileA是隐藏文件,则无效,因为!( 模式 )构造仅创建所有常规文件的列表不匹配模式

答案 2 :(得分:1)

您也可以以交互方式进行,

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

答案 3 :(得分:1)

对于多个文件,以下内容将删除名称中包含FileA或FileB的文件以外的所有文件。

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

它在一长串文件中更有用。如果它只是一个简短的清单,我会选择CoverosGene的回复。

答案 4 :(得分:1)

基于解析目录列表的大多数方法都可能容易出错。

如果您对父目录具有写入权限,并且您的必要文件位于子目录foo中,那么如何:

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

即。先将你的基本文件放在地狱之中!