Как удалить все файлы, кроме одного именованного файла из определенной папки [дубликат]

На этот вопрос уже есть ответ здесь:

Вот ситуация .

У меня есть каталог, в котором много файлов с разными расширениями. Я хочу удалить все файлы, кроме одного с определенным именем.

Это можно легко сделать с помощью графического интерфейса пользователя, выбрав все, нажав ctrl и отменив выбор нужного файла.

Это именно то, что я хочу, но как я могу сделать это из командной строки?

Например: dirA содержит следующие файлы:

a.txt
b.txt
c.php
d.html
a.db
b.db
e.html

Я хочу удалить все файлы, оставив только файл с именем a.txt .

52
задан 16 May 2015 в 16:44

5 ответов

Я шел с этой легкой простой большой командой:

rm !(a.txt)

можно использовать! как отрицание

Протестируйте шарик с эхом сначала т.е.

echo !(a.txt)

Если это не работает, для bash Вы, возможно, должны включить это с

shopt -s extglob

Если Вы хотели сохранить обоих a.txt и b.txt, можно использовать !(a.txt|b.txt) или !([ab].txt).

Править:

сделать rm работа рекурсивно просто добавляет -r как

rm -r !(a.txt)

и также, это работает с папкой. просто потребность изменить имя на имя dir, такой что касается a_dir

rm -r !(a_dir)
89
ответ дан 16 May 2015 в 16:44

Можно попробовать эту команду:

find . \! -name 'a.txt' -delete

, Но Вы должны быть осторожными, потому что находят, что команда является рекурсивной.

0
ответ дан 16 May 2015 в 16:44

Можно сделать это в терминале:

cd dirA 
export GLOBIGNORE=a.txt
rm *
export GLOBIGNORE=
0
ответ дан 16 May 2015 в 16:44

Можно использовать команду:

find ! -name 'a.txt' -type f -exec rm -f {} +

Это будет искать файлы (-type f) в текущем каталоге за исключением файла a.txt (! -name 'a.txt) и затем удалит их (-exec rm -f {} +)

0
ответ дан 16 May 2015 в 16:44

Используйте find и xargs

find folder -type f -not -name 'a.txt' -print0 | xargs -0 rm

Для исключения нескольких вещей:

find folder -type f -not -name 'a.txt' -not -name 'b.txt' -print0 | xargs -0 rm

Это также работает с подстановочными знаками:

find folder -type f -not -name '*.png' -not -name 'b.txt' -print0  | xargs -0 rm

Для поиска в текущей папке используйте . вместо 'папки'.

Основной источник

0
ответ дан 16 May 2015 в 16:44

Другие вопросы по тегам:

Похожие вопросы: