除了FileS,甚至是隐藏文件外,如何删除文件夹中的其他所有内容? 我使用的是Ubuntu。
我尝试了以下不成功的
rm [^fileA]
答案 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
即。先将你的基本文件放在地狱之中!