Что вы на самом деле делаете, так это объединяете все шары tar. Вы можете увидеть весь контент, используя переключатель tar -i
:
$ tar -itvf rootdir.tar.xz
subdir_2/
subdir_1/
Я не думаю, что возможно создать tar-шар из всех этих подкаталогов tar-шаров напрямую через канал. Вам нужно сначала записать их на диск в цикле:
for foo in `find rootdir -maxdepth 1 -name "subdir_*" -type d`
do
tar --create --verbose --file=- --directory="rootdir" "$(basename ${foo})" \
>"${foo}.tar"
done
tar -cf - rootdir/subdir*.tar | xz -zc9 > rootdir.tar.xz
rm rootdir/subdir*.tar
Вы можете заменить cd
функцией, которая добавляет любую обработку, которую вы хотите:
cd() {
builtin cd "$@"
# Do whatever you want here
}
Один из способов сделать это — использовать псевдоним Команда
:
alias cdgit="cd /foo; git status"
Затем вы выполняете cdgit
и переходите в каталог /foo
и выполняете git status
Я использую что-то похожее на ответ Стивена Китта в моем .bashrc
:
function cd() {
command cd "$@" || return
if [[ -d .git ]]
then
git status --short
else
ls -al
fi
}
You может создавать дополнительные условия для обработки разных вещей по мере необходимости.
ПРИМЕЧАНИЕ: поскольку мы затираем ссылку на команду cd
, вы должны использовать команду cd
, встроенную команду cd
или \ cd
, чтобы функция не вызывала себя и не повторялась вечно. По этой причине некоторые могут счесть полезным переименовать эту функцию.