The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск файлового менеджера Midnight Commander 4.8.30, opennews (ok), 14-Авг-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


44. "Выпуск файлового менеджера Midnight Commander 4.8.30"  –4 +/
Сообщение от rshadow (ok), 14-Авг-23, 10:33 
Для работы с архивами добавьте команды в .zshrc (или аналогичный для вашей оболочки)

# Распаковка архивов
# example: extract file
extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.deb)      ar vx $1        ;;
            *.tar.bz2)  tar xjf $1      ;;
            *.tar.gz)   tar xzf $1      ;;
            *.tar.xz)   tar xJf $1      ;;
            *.bz2)      bunzip2 $1      ;;
            *.rar)      unrar x $1      ;;
            *.gz)       gunzip $1       ;;
            *.tar)      tar xf $1       ;;
            *.tbz2)     tar xjf $1      ;;
            *.tbz)      tar -xjvf $1    ;;
            *.tgz)      tar xzf $1      ;;
            *.docx)     unzip $1        ;;
            *.zip)      unzip $1        ;;
            *.Z)        uncompress $1   ;;
            *.7z)       7z x $1         ;;
            *)          echo "'$1' неизвестный тип архива" ;;
        esac
    else
        echo "'$1' файл не найден"
    fi
}

# Запаковать архив
# example: archive tar file
archive () {
    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               ;;
            *)          echo "'$1' неизвестный тип архива" ;;
        esac
    else
        echo "'$2' файл не найден"
    fi
}

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

46. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +4 +/
Сообщение от Аноним (16), 14-Авг-23, 10:37 
Посыпется на архивах, содержащих пробел в имени. Пора бы уже брать себе в привычку оборачивать переменные в кавычки.
Ответить | Правка | Наверх | Cообщить модератору

51. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +1 +/
Сообщение от rshadow (ok), 14-Авг-23, 10:44 
Полностью с тобой согласен.
Ответить | Правка | Наверх | Cообщить модератору

72. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (38), 14-Авг-23, 12:11 
Только переменные в кавычках не поддерживают глоббинг, а это значит, будут проблемы, где файлы с переносом строки в имени или спецсимволами навроде доллара и кавычек -- шелл может всё это экранировать самостоятельно и вручную ты ничего не сделаешь универсально. И с регулярками могут быть самые разные сложности. А добавишь глоббинг и будет в два раза больше проблем, но уже с другими вводными.

Плохой совет, не годный. Но, я полагаю, любой, кто планирует использовать шелл, должен быть готов к конструкциям вида 'rty=qwe; cmd '"'"'var="${bar%/*}";'"'"' arg;' (реальный пример). Просто надо понимать ограничения, особенно, если это работа с произвольными данными или тем более именами файлов. С файлами вообще никто не умеет работать. Есть простой способ через find, конечно, но это с сабшеллом и опять же глоббингом.

Поэтому, KISS вполне имеет место быть, всё равно, чтобы сделать универсально, сначала придётся хорошо попотеть, а это время.

Ответить | Правка | К родителю #46 | Наверх | Cообщить модератору

73. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (16), 14-Авг-23, 12:24 
> переменные в кавычках не поддерживают глоббинг

А должны? На примере с extract делай глоббинг сам, вручную вбивая его в шелл, то есть за пределами функции: extract ./плохоеимяфайла* -- далее шелл его заглобит, и extract будет работать с уже зарезольвленным именем, в котором хоть перенос строки, хоть черт лысый. Твоя ошибка в том, что тебе кажется, что функция должна уметь все на свете, -- а это противоречит single-responsibility principle.

> будут проблемы, где файлы с переносом строки в имени или спецсимволами навроде доллара и кавычек

Не будут.

> с регулярками могут быть самые разные сложности

Какие?

Ответить | Правка | Наверх | Cообщить модератору

75. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (38), 14-Авг-23, 12:34 
Любые незаглобленные переменные опасные. Как обойти то, что extglob не поддерживает имена файлов, например, с собачкой, когда я хотел матчить в нём несколько вариантов расширения у файла, я так и не придумал.
Ответить | Правка | Наверх | Cообщить модератору

192. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от warlock66613 (ok), 15-Авг-23, 07:58 
Этого недостаточно. Ещё проблемой будут имена файлов, начинающиеся с минуса.
Ответить | Правка | К родителю #46 | Наверх | Cообщить модератору

48. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (38), 14-Авг-23, 10:42 
Вот распаковка тарболов для баша

case "${file}" in
    *.[Tt][Aa][Rr].[Gg][Zz]) ;&
    *.[Tt][Aa][Rr].[Xx][Zz]) ;&
    *.[Tt][Aa][Rr].[Bb][Zz]2) ;&
    *.[Tt][Aa][Rr].[Zz][Ss][Tt]) ;&
    *.[Tt][Gg][Zz]) ;&
    *.[Tt][Xx][Zz]) ;&
    *.[Tt][Bb][Zz]2) ;&
    *.[Tt][Zz][Ss][Tt]) ;&
    *.[Tt][Aa][Rr]) tar xf "${file}" -C "${tmpDir}" --force-local --xattrs --xattrs-include="user.*" --pax-option="delete=LIBARCHIVE.*"; ;;
esac

Но, я полагаю, тут автору комментария надо установить KDE, в котором есть поддержка просмотра архивов в ФМ без извлечения на диск. Только эта поддержка периодически отваливается, это да.
Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

109. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (109), 14-Авг-23, 16:22 
А не проще ли имя файла к нижнему регистру сразу привести в case блоке (`case "${file@U}" in ... esac`), чтобы не тр3ться с регистром регулярками?
Ответить | Правка | Наверх | Cообщить модератору

118. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (38), 14-Авг-23, 17:00 
Может, и проще, но появилось только в 5 баше. Это классический паттерн и ровно тот же привет мир столетней давности, что и у соседнего комментатора, немного адаптированный под реальное применение. Вместо @L я использую 2 запятые обычно -- т.е. вместо трансформации, модификацию регистра. Ещё наверно можно nocaseglob заюзать для примерно того же результата.
Ответить | Правка | Наверх | Cообщить модератору

88. Скрыто модератором  +/
Сообщение от nm0i__ (?), 14-Авг-23, 14:09 
Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

124. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (-), 14-Авг-23, 17:09 
> Для работы с архивами добавьте команды в .zshrc (или аналогичный для вашей
> оболочки)
> # Распаковка архивов
> # example: extract file
> extract () {
>     if [ -f $1 ] ; then

Теперь попробуйте так распаковать из архива с 10 000 файлов вот эти 5 штук, визуально маркировав их... почувствуйте разницу... :)

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

144. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +/
Сообщение от Аноним (38), 14-Авг-23, 18:05 
Кроме шуток, ни разу в жизни не сталкивался с подобной задачей. Если мне надо извлечь 1 элемент, я перетащу его мышкой из окна нормального архиватора в соседнее окно нормального графического фм. Искать что-то в куче файлов в архиве? Не, не реально. Я либо точно знаю, что мне необходимо и как и где его найти в архиве, либо данные в таком виде никогда не потребуются и без ознакомления со всей извлечённой информацией в специализированной программе найдены не будут (куча мусора со случайными именами, не надо так).
Ответить | Правка | Наверх | Cообщить модератору

189. "Выпуск файлового менеджера Midnight Commander 4.8.30"  +1 +/
Сообщение от leap42 (ok), 15-Авг-23, 05:17 
>[оверквотинг удален]
>      ;;
>            
> *)          echo
> "'$1' неизвестный тип архива" ;;
>         esac
>     else
>         echo "'$2' файл не
> найден"
>     fi
> }

вы не в курсе, да, что современный tar сам определяет архиватор и банальное "tar xf" сработает для любого tar архива, если архиватор установлен в системе?

но даже если отбросить это, я не понимаю, чем это лучше mc, если мне нужно вытянуть один файл? потом же мусор сам по себе не уберётся

ps архивирую как раз в консоли: tar Scaf <архив.tzst> <файлы и папки> (и да, tzst можно менять на то, что нужно, и tar опять сам всё поймёт)

Ответить | Правка | К родителю #44 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру