Как видно из lsusb -v
, ваши интерфейсы имеют разные имена. Это можно дополнительно проверить с помощью
udevadm info -a -p $(udevadm info -q path -n can0)
udevadm info -a -p $(udevadm info -q path -n can1)
Поэтому вы можете использовать ATTR{interface}
, чтобы различать их.
SUBSYSTEM=="usb", ATTRS{idVendor}=="0c72", ATTRS{idProduct}=="0011", ATTR{interface}=="PCAN-USB Pro FD CAN"
Обратите внимание, что выше мы использовали определенную комбинацию клавиш ATTR
и ATTRS
, которая имеет значение, потому что мы ищем значения в текущем или текущем и родительском устройстве, см.http://www.reactivated.net/writing_udev_rules.html.
Если имена интерфейсов совпадают, их можно отличить по ATTR{bInterfaceNumber}
.
Если вы хотите удалить содержимое каталога, а не сам каталог, все, что вам нужно сделать, это сказать rm
удалить содержимое:
rm inner/*
Это удалит все не -скрытые файлы в ./inner
и оставит каталог нетронутым. Чтобы также удалить любые подкаталоги, используйте-r
:
rm -r inner/*
Если вы также хотите удалить скрытые файлы, вы можете сделать (, предполагая, что вы используете bash):
shopt -s dotglob
rm -r inner/*
Эта последняя команда удалит все файлы и все каталоги в inner
, но сам inner
оставит нетронутым.
Наконец, обратите внимание, что вам не нужно cd
–outer
для запуска какого-либо из этих:
$ tree -a outer/
outer/
├── dir
└── inner
├── dir
├── file
└──.hidden
3 directories, 2 files
Теперь я могу запустить rm -r outer/inner/*
из моего текущего каталога, не нужно cd outer
, и он удалит все, кроме самого каталога:
$ shopt -s dotglob
$ rm -r outer/inner/*
$ tree -a outer/
outer/
├── dir
└── inner
2 directories, 0 files
find inner ! -path inner -delete
Это приведет к обходу каталога inner
и удалению всего. Тест ! -path inner
гарантирует, что сам каталог inner
не удален (, но все его содержимое удалено ).
Описанное выше будет работать в Linux с GNUfind
(по умолчаниюfind
). Однако действие -delete
не является -стандартным (, хотя обычно )реализуется. Для стандартного совместимого варианта используйте
find inner -depth ! -path inner -exec rm -r {} +
Опция -depth
гарантирует, что find
выполняет первый -обход структуры каталогов в глубину. Без этого вы можете попытаться удалить каталоги до того, как они опустеют.
Если вы хотите удалить все файлы в некоторой структуре каталогов, но сохранить все каталоги, проще всего использовать переключатель find
-delete
:
find /path/to/outer -type f -delete
Чтобы сначала проверить, что будет удалено, просто оставьте -delete
в конце.