ZIP-файлы во всех каталогах и подпапках без самой папки

Мне нужно рекурсивно заархивировать отдельные файлы в пути к каталогу и его подпапках без архивирования папок или каталога. Мне также нужно исключить определенные типы файлов (более одного).

Как я могу сделать это в Linux, используя ZIP?

Вот модифицированный скрипт (спасибо Ravexina).

#!/bin/bash
echo "hello world"
dir=/home/fjaffer/temp
#cd "${dir}"
#cd $(echo $dir | tr -d '\r')
cd "$dir"
find -not -iname '*.txt' -type f | while read -r file_name; \
do zip "$(dir "$file_name")".zip "$file_name" ; done

Вывод: строка 8 команда zip не найдена.

1 ответ

Вы можете сделать это примерно так:

find -not -iname '*.mp3' -type f | while read -r file_name; \
do zip "$(realpath "$file_name")".zip "$file_name" ; done

Он будет архивировать все файлы в их каталоге, отдельно друг от друга, что из "mp3" файлов.

Вы также можете исключить другие типы файлов, например, zip и mp3 файлы:

find -not -iname '*.mp3' -not -iname '*.zip' -type f

Итак, эта структура:

.
└── a
    ├── 1
    │   └── 1.mp3
    └── 2
        ├── 1.jpg
        ├── 1.mp3
        └── 1.mpv

станет:

.
└── a
    ├── 1
    │   └── 1.mp3
    └── 2
        ├── 1.jpg
        ├── 1.jpg.zip
        ├── 1.mp3
        ├── 1.mpv
        └── 1.mpv.zip
Другие вопросы по тегам