Удалить все файлы, кроме одного с помощью rm

10

Есть ли способ удалить все файлы в каталоге, кроме одного с определенным именем файла? Например, если у меня был каталог , содержащий файлы file1, file2и dontdelete. Был бы какой-нибудь способ быстро удалить file1, а так file2и нет dontdelete? Я знаю, что я мог бы просто сделать, rm file1 file2но это не будет работать для нескольких файлов. Кроме того, я на Mac OS X, если это имеет значение.

Wuffers
источник
Ваше решение может быть простым подстановочным знаком: rm file * удалит file1 и file2, но не удалит его. Если ваши потребности более сложны, то, в зависимости от языка сценариев оболочки, вы можете сгенерировать список файлов, которые вы хотите удалить, используя регулярное выражение, и передать его в команду rm.
therobyouknow
@Rob: Да, моя ситуация сложнее, чем это. И ответ Игнасио сработал. Спасибо хоть!
Вуфферс

Ответы:

16

В Баш:

shopt -s extglob
rm !(dontdelete)
Игнасио Васкес-Абрамс
источник
1
+1 Вау очень емкое решение. Будет иметь это в виду, если мне это нужно.
therobyouknow
это можно расширить, чтобы включить несколько каталогов, которые вы не хотите удалять
mcgrailm