LINUX.ORG.RU

Скриптик от нервов

 


1

1

Доброго дня господа.
Не определился куда запостить, в силу отсутствия раздела для солюшенов.
Работал на чужом сервере, без внешних интернетов, и нужно было работать с тучей архивов.
Пришлось быстро накатать пару строк, для удобства распаковки. Наверняка свелосепедировал, но если нет интернетов, может кому тоже пригодиться.
Архиватор p7zip. В bashrc :

# path detect
unarchive(){
if [[ $(echo "$1" | grep "/") ]]; then
    archive_name="$(basename $1)"
    work_path="$(echo "$1" | sed -e "s/$(echo "$1" | awk -F '/' '{print $NF}')//")"
else
    archive_name="$1"
    work_path="./"
fi

# for double file extension (*.tar.*)
if [[ "$(echo "$archive_name" | awk -F '.' '{print $(NF-1)}')" == "tar" ]]; then
    last_ext_name=$(echo "$archive_name" | awk -F '.' '{print $NF}')
    7z x -o"$work_path" "$work_path$archive_name"
    7z x -o"$work_path$(echo "$archive_name" | sed -e "s/.tar.$last_ext_name//")" "$work_path$(echo "$archive_name" | sed -e "s/.$last_ext_name//")"
    rm "$(echo "$work_path$archive_name" | sed -e "s/.$last_ext_name//")"
    cd $(echo "$work_path$archive_name" | sed -e "s/.tar.$last_ext_name//")
    return
fi

#for other archives
7z x -o"$(echo "$work_path$archive_name" | sed -e "s/.$(echo "$work_path$archive_name" | awk -F '.' '{print $NF}')//")" "$work_path$archive_name" 
cd $(echo "$work_path$archive_name" | sed -e "s/.$(echo "$work_path$archive_name" | awk -F '.' '{print $NF}')//")
И алиас, в него же, «alias un=„unarchive $1“»
Для и своего удобства, оставил пост на сдешней вике.
Всем хорошего дня.

Перемещено tazhate из talks

★★★

Последнее исправление: Spirit_of_Stallman (всего исправлений: 1)

Тут уже не раз приводили такую конструкцию:


extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)   tar xjf $1     ;;
            *.tar.gz)    tar xzf $1     ;;
            *.tar.xz)    tar Jxf $1     ;;
            *.bz2)       bunzip2 $1     ;;
            *.rar)       unrar x $1     ;;
            *.gzip|*.gz) gunzip $1      ;;
            *.tar)       tar xf $1      ;;
            *.tbz2)      tar xjf $1     ;;
            *.tgz)       tar xzf $1     ;;
            *.zip)       unzip $1       ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1        ;;
            *.rar)       unrar x $1     ;;
            *.xz)        unxz -k $1     ;;
            *)           echo "я не в курсе как распаковать '$1'..." ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

compress () {
	if [ $1 ]; then
		case $1 in
			tbz)
				tar cjvf $2.tar.bz2 $2 ;;
			tgz)
				tar czvf $2.tar.gz $2 ;;
			tar)
				tar cpvf $2.tar $2 ;;
			bz2)
				bzip $2 ;;
			gz)
				gzip -c -9 -n $2 > $2.gz ;;
			zip)
				zip -r $2.zip $2 ;;
			7z)
				7z a $2.7z $2 ;;
            xz)
                xz -z $2.xz $2 ;;
			*)
				echo "Unable to compress '$1'" ;;
		esac
	else
		echo "'$1' is not a valid file"
	fi
}

Bad_ptr ★★★★★
()
Ответ на: комментарий от lazyklimm

Был уверен что есть нечто такое.
Но тут велосипед, в силу не возможности подтягивать пакеты в систему.

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Bad_ptr

Ну вот, не нашел этого - и зря потратил пару минут жизни :(

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от Bad_ptr

А, извиняюсь, нахрена столько вариантов для tar? Ведь при извлечении определяется автоматом, а при создании можно указать -a.

anonymous
()
Ответ на: комментарий от anonymous

нахрена столько вариантов для tar?

не знаю. )

Bad_ptr ★★★★★
()
Ответ на: комментарий от GotF

все одинаково не нужны.

А что было за какая-то штуковина, которая позволяла башем по архивам как по папкам ходить?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

А что было за какая-то штуковина, которая позволяла башем по архивам как по папкам ходить?

Может, AVFS? Я сам с такими не сталкивался.

GotF ★★★★★
()
Ответ на: комментарий от GotF

7z x же «само» тип архива и компрессии определит и распакует.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от demidrol

case для tar не нужен — он же автоматом распознает

может и не нужен. Правда всё-равно неудобно вспоминать и лезть в маны, какую там буковку надо написать, когда редко пользуешься этими tar'ами и прочим.

Bad_ptr ★★★★★
()
Ответ на: комментарий от anonymous

пользуйся чаще

Ну если нету необходимости такой :)). Что, специально, тренировочный курс проходить раз в месяц по упаковке-распаковке разного рода архивов?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Рядовой Bad_ptr сборку-разборку тестового архива закончил!
Разрешите стать в строй!
:)

Spirit_of_Stallman ★★★
() автор топика
Ответ на: комментарий от GateKeeper

tar tvf

Ну вот а потом через год, уже и не вспомнишь, что там tvf надо писать или какие буковки... Хотя, вот сейчас, наверно, уже запомню :)

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Читай уже ман, я тебе не про это говорил, а ровно про то, на что отвечал.

GateKeeper ★★
()
Ответ на: комментарий от HerrWeigel

А про то, что устройство - это тоже файл (внезапно!), ты не знаешь?

dk@porter :\> test -f /dev/sda && echo WIN || echo FUUUU                                                                            
FUUUU
dk@porter :\> test -b /dev/sda && echo WIN || echo FUUUU                                                                             
WIN
lazyklimm ★★★★★
()
Ответ на: комментарий от HerrWeigel

Звезду сними и встань в угол. Внезапно.

anonymous
()
Ответ на: комментарий от snoopcat

А ты можешь снять все четыре.

anonymous
()
Ответ на: комментарий от anonymous

Раньше tar не умел распознавать форматы.

anonymous
()

Вам надо было поискать, прежде чем писать это(я имею ввиду сообщение, а не скрипт). Вы легко нашли бы atool. Он вводит командy aunpack, которая работают со многими видами архивов. Плюс eсли в архиве много файлов, то aunpack распакует их в отдельную директорию с именем как у архива. А если в архиве только одна директория, то он распакуется прям в текущий каталог.

arte-at-marte
()
Ответ на: комментарий от arte-at-marte

Нет. Да и не о коде речь.

Работал на чужом сервере, без внешних интернетов

без внешних интернетов

Обычно, если нельзя использовать внешние сети, это говорит о том, что нельзя поставить какой-то пакет из репозиториев.
А иногда, даже в интернет не выйти, в какой-то момент. А решать что-то нужно.

Spirit_of_Stallman ★★★
() автор топика

Не знаю как вам, а мне вот нравится держать в уме ключики для всех типов архивов и, заглядывая в ман, писать их самому. С такими скриптами можно однажды забыть как распаковать архив. Бритва Оккама.

je-ke
()
Ответ на: комментарий от je-ke

Не хотел бы вас обидеть, но вы видимо не поняли зачем он тут.
Я и так хорошо всё помню. Тут вопрос о массовых работах и манипуляции.

Spirit_of_Stallman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.