Вот сценарий, который извлекает файл tar.gz верхнего уровня (My_Tar.tar.gz) в $ NEWDIR, затем просматривает извлеченное содержимое и извлекает все обнаруженные файлы tar в каталоги на основе этих имен файлов tar. Если вложенные файлы tar были созданы «над» их содержимым (так, например, в Nested_Tar.tar уже есть подкаталог «Nested_Tar /»), то вы можете пропустить часть mkdir
ниже, а также параметр -C "$ d"
для внутреннего tar
.
NEWDIR=output
tar -xz -C $NEWDIR -f ../My_Tar.tar.gz
(cd $NEWDIR;
for f in *.tar
do
d=$(basename "$f" .tar)
mkdir "$d" && tar -x -C "$d" -f "$f"
done
)
Я использовал подоболочку только для того, чтобы сохранить pwd вашей существующей оболочки в cwd; если вы предпочитаете оказаться внутри $ NEWDIR, просто удалите внешнюю скобку.
Я не совсем уверен, что это полезно для (по сравнению с nano
, vim
или любым редактором, который вам нравится ), но... нужен ли ему псевдоним?
$ <<.
> foo
> bar
> baz
>.
Просто "
будет еще короче, но будет сообщение об ошибке...
$ "
> oh
> ah
> ui
> "
bash: $'\noh\nah\nui\n': command not found
Заметьте, эти вещи на самом деле никуда не делись...
$ history
497 <<.
foo
bar
baz
.
Если вас это беспокоит, сначала отключите историю, а потом очистите ее.
Для пользовательской подсказки PS2 это сложно, поскольку (по крайней мере для Bash )она должна быть установлена на родительскую оболочку. Если вы установите его в подоболочке, он будет проигнорирован. Вы можете обойти это, запустив явный экземпляр оболочки, подобный этому...
$ PS1=@_ PS2=:_ bash --norc
@_<<.
:_hey
:_.
@_exit
$
Но сейчас имеет смысл написать специальную программу очистки и удаления.
Другой подход, вообще не использующий подсказку PS2:
$ while read -p ":-> " ; do : ; done
:-> hey
:-> how
:-> do
Только нельзя использовать '.' чтобы выбраться отсюда. Ну, вы могли бы легко добавить это как условие...
$ alias scratch='(var=_; while read -r -p ":-> " var; do [ "$var" ==. ] && break; done)'
$ scratch
:-> a
:-> b
:-> c
:->.
Однако вы также можете просто выйти, отправив EOF с помощью Ctrl + D .
Используйте read
для чтения ввода построчно. Вы можете указать подсказку. Следующий фрагмент кода читает строки и игнорирует их содержимое до тех пор, пока не появится строка, состоящая из необязательных пробелов вокруг одной точки, или пока вы не нажмете Ctrl + D на пустой строке.
scratch () {
local line
while [[ "$line" != "." ]] && read -r -e -p "scratch> " line; do :; done
}