Я ищу однострочную команду или сценарий, который архивирует 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