Удалить все файлы в каталоге, не удаляя каталог

Как видно из 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}.

1
06.05.2020, 16:14
3 ответа

Если вы хотите удалить содержимое каталога, а не сам каталог, все, что вам нужно сделать, это сказать rmудалить содержимое:

rm inner/*

Это удалит все не -скрытые файлы в ./innerи оставит каталог нетронутым. Чтобы также удалить любые подкаталоги, используйте-r:

rm -r inner/*

Если вы также хотите удалить скрытые файлы, вы можете сделать (, предполагая, что вы используете bash):

shopt -s dotglob
rm -r inner/*

Эта последняя команда удалит все файлы и все каталоги в inner, но сам innerоставит нетронутым.

Наконец, обратите внимание, что вам не нужно cdouterдля запуска какого-либо из этих:

$ 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
6
28.04.2021, 23:16
find inner ! -path inner -delete

Это приведет к обходу каталога innerи удалению всего. Тест ! -path innerгарантирует, что сам каталог innerне удален (, но все его содержимое удалено ).

Описанное выше будет работать в Linux с GNUfind(по умолчаниюfind). Однако действие -deleteне является -стандартным (, хотя обычно )реализуется. Для стандартного совместимого варианта используйте

find inner -depth ! -path inner -exec rm -r {} +

Опция -depthгарантирует, что findвыполняет первый -обход структуры каталогов в глубину. Без этого вы можете попытаться удалить каталоги до того, как они опустеют.

0
28.04.2021, 23:16

Если вы хотите удалить все файлы в некоторой структуре каталогов, но сохранить все каталоги, проще всего использовать переключатель find-delete:

find /path/to/outer -type f -delete

Чтобы сначала проверить, что будет удалено, просто оставьте -deleteв конце.

1
28.04.2021, 23:16

Теги

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