Как сжать все файлы из нескольких подпапок?

Многие ответы, найденные в Интернете (в том числе в комментарии TNW), основаны на / sys / bus / usb / devices / 2-2 / power / level или / sys / bus / usb. / devices / 2-2 / power / control , которые устарели, начиная с ядра 2.6.something. Для новых ядер предлагаемая процедура состоит в том, чтобы отвязать и повторно привязать его драйвер, что обычно приводит к выключению питания:

# Find out which driver to unbind
tree /sys/bus/usb/devices/2-2.1 | grep driver
|-- driver -> ../../../../../../bus/usb/drivers/whatever

# Unbind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/unbind

# Rebind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/bind

5
25.08.2017, 11:46
3 ответа

Что-то вроде этого скрипта может сделать эту работу:

for i in `find /path -type d -name data`;
do
if [ "$i" = "s3/data" ]
 then continue
 else cd "$i" && zip Archive.zip *
fi
done

P.S. Замените /pathначальной точкой вашего дерева каталогов

.
3
27.01.2020, 20:34
find. -type d -name data -execdir zip -jr data/Archive.zip data ';'

Эта команда findнайдет каждый каталог dataв текущем каталоге и выполнит

zip -jr data/Archive.zip data

в каждом из каталогов sN(родительский каталог каталогов data). Это также заархивирует скрытые файлы.

Установка флага -jна zipудалит пути к файлам, добавленным в архив, и архив будет помещен в каталог data.

Это работает, потому что -execdirв основном выполняет cdобращение к родительскому каталогу найденного объекта перед выполнением команды.

Чтобы избежать использования каталога s3, используйте

find. -type d -name data \! -path "./s3/*" -execdir zip -jr data/Archive.zip data ';'
5
27.01.2020, 20:34

POSIXly (за исключением команды zip, очевидно):

find. -path./s3 -prune -o -type d -name data -exec sh -c '
   for dir do
     (cd "$dir" && zip -r Archive.zip.)
   done' sh {} +

Или сzsh -o extendedglob:

for dir (./**/data~*/s3/*(/N)) (cd $dir && zip -r Archive.zip.)

Или, если вы не хотите рекурсивно искать папки data:

for dir (./^s3/data(/N)) (cd $dir && zip -r Archive.zip.)

Или, чтобы быть еще более конкретным (здесь нет необходимости extendedglob):

for dir (s[124]/data(/N)) (cd $dir && zip -r Archive.zip.)
3
27.01.2020, 20:34

Теги

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