Я должен рекурсивно архивировать отдельные файлы самостоятельно в пути к каталогу и его sub папках, не архивируя папки или каталог. Я также должен исключить определенные типы файлов (больше затем один).
Как я могу сделать это в 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, не найденных.
Вы можете сделать это как-то так:
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