Назад | Перейти на главную страницу

Однострочная команда / сценарий для архивации определенного количества папок

Я ищу однострочную команду или сценарий, который архивирует 5 папок в файлы .tar (gzip / bzip не требуется) в определенном каталоге и удаляет папки после успешного сжатия. Он также должен использовать исходное имя папки в качестве имени файла для архива.

До сих пор я использовал текущую команду, которая делает только один каталог за раз:

tar -c directory > directory.tar && rm -rf directory

Заранее спасибо.

это немного длинновато, но:

for i in dir1 dir2 dir3; do tar -cf $i.tar $i; if [ $? -eq 0 ]; then rm -rf $i; fi; done

редактировать; tar -cf dir.tar dir немного короче, чем tar -c dir > dir.tar

пример сценария:

#!/bin/sh
DIR=$1
tar -cf $DIR.tar $DIR/
if [ $? -eq 0 ]; then
  rm -rf $DIR
fi

Вы можете вбить это в script.sh, chmod 755 script.sh а затем запустите его как script.sh directory

однако вы можете добавить к нему намного больше, чтобы получить список каталогов из вашего основного каталога и даже использовать файл, чтобы отслеживать последний раз directory был заархивирован, поэтому вы можете установить свой максимум и т. д.

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

#!/bin/bash
c=1
for directory in $1/*
do
    if [[ -d "$directory" ]]
    then
        tar -cf "${directory}.tar" "$directory" && rm -rf "$directory"
        if (( c++ > 5 ))
        then
            break
        fi
    fi
done

Мне интересно узнать причину ограничения.

for dir in dir1 dir2 dir3 dir4 dir5 ; do tar -c "$dir" > "$dir".tar && rm -rf "$dir" ; done