Як мені вдасться стиснути підкаталоги в окремі архіви?
Приклад:
directory
subdir1
subdir2
Потрібно створити subdir1 (.tar) .gz та subdir2 (.tar) .gz
Як мені вдасться стиснути підкаталоги в окремі архіви?
Приклад:
directory
subdir1
subdir2
Потрібно створити subdir1 (.tar) .gz та subdir2 (.tar) .gz
Відповіді:
Цей невеликий сценарій, здається, найкращий варіант, враховуючи ваші вимоги:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Він належним чином обробляє каталоги з пробілами в їх назвах.
Як щодо цього: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Пояснення: Ви запускаєте знахідку по всіх елементах у поточному каталозі. Maxdepth 0 змушує не повторювати нижче наведених аргументів. (У цьому випадку * або всі елементи у вашому поточному каталозі) Аргумент 'd' до "-type" відповідає лише каталогам. Потім exec запускає дьоготь на будь-які матчі. ({} замінюється відповідним файлом)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Це створить файл під назвою blah.tar.gz для кожного файлу в каталозі під назвою blah.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Якщо у вас є більше ніж просто каталоги в каталозі (тобто файли, як ls поверне все в каталозі), тоді використовуйте це:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v виключає поточний каталог, який відображатиметься в find
команді за замовчуванням.
for dir in *