Невозможно удалить все остальное в папке, кроме FileA - PullRequest
0 голосов
/ 11 марта 2009

Как я могу удалить все остальное в папке, кроме FileA, даже скрытые файлы? Я использую Ubuntu.

Я безуспешно попробовал следующее

rm [^fileA]

Ответы [ 5 ]

6 голосов
/ 11 марта 2009
find . -not -name fileA -exec rm {} \;

Обратите внимание, что при этом будут удалены только файлы, а не папки. Поверьте, вы не хотите удалять подобные папки.

3 голосов
/ 11 марта 2009

Используйте extglob. Предполагая, что FileA является обычным файлом (то есть не начинается с .), тогда вы можете сделать:

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

Если вместо этого FileA является скрытым файлом, это не сработает, поскольку конструкция !( pattern ) создает только список всех обычных файлов, не соответствующих pattern .

1 голос
/ 11 марта 2009

Большинство способов сделать это на основе анализа списка каталогов могут быть подвержены ошибкам.

Если у вас есть права на запись в родительский каталог, а необходимый файл находится в подкаталоге foo, как насчет:

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

т.е. сначала достаньте свои важные файлы, черт возьми, с дороги!

1 голос
/ 11 марта 2009

Для нескольких файлов следующее удалит все файлы, кроме тех, которые имеют FileA или FileB в имени.

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

Это более полезно в длинном списке файлов. Если бы это был только короткий список, я бы пошел с ответом CoverosGene.

1 голос
/ 11 марта 2009

Вы также можете сделать это в интерактивном режиме,

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...