@ChrisDown дал a bash
решение, которое принимает во внимание различие файлов и каталогов, и также если нет никакого файла для удаления.
Учитывая, что rm
перестал бы работать однако в этих ситуациях, команда могла быть упрощена как (все еще с bash
):
shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png)
Не забудьте сбрасывать две опции оболочки к их значениям по умолчанию. В моем случае extglob
уже установлен на интерактивных оболочках, таким образом, мне только нужно
shopt -u nocaseglob
Или выполненный те две команды в подоболочке:
(shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png))
Если требуется видеть заранее, какие файлы будут удалены, просто займут место rm
с echo
.
Если Вы хотели бы, чтобы скрытые файлы были удалены также, добавьте dotglob
опция.
@umair я не уверен, почему sdb показывает как съемный, мог Вы отправлять o/p этого сценария
for device in /sys/block/*
do
if udevadm info --query=property --path=$device | grep -q ^ID_BUS=usb
then
echo $device
fi
done
Мне нравится использовать эту остроту.
find /dev/disk/by-path -name "*-usb-*" -not -name "*-part*" -exec readlink -f {} \;
Это 1) перечислит все устройства с USB в его пути где-нибудь, 2) фильтры для разделов и наконец 3) читает ссылку, на которую это указывает. Пример произвел:
/dev/sdc
Важные примечания:
sdb
отмечен как съемный, вероятно, потому что контроллер поддерживает замену в горячем режиме SCSI/SATA - также названный "заменой в горячем режиме". – gertvdijk 19.12.2012, 13:40