samba
имеет режим, который создаст учетные записи "на лету". Я не уверен, связан ли Ваш вопрос с аутентифицируемым доступом на базе Windows от "новых" пользователей.
Вот:
v=$(unzip a.zip | grep -m1 'creating:' | cut -d' ' -f5-)
Объяснение
$(...)
оболочка получения. Это получает вывод команд в нем и заменяет ими как переменная.unzip
команда передается по каналу к grep
, который передается аргумент -m1
заставить его возвратить только первый результат и текст creating:
, который является частью текста unzip
печать к stdout, когда это создает каталог. grep
печать creating: foo/
к stdout, который передается по каналу cut
.cut
используется для печати всех столбцов (разделенный пробелами) после второго. Мы указываем от 5 до конца строки хотя потому что слово creating:
снабжается префиксом несколько пробелов. Мы хотим использовать все столбцы до конца строки в случае, если имя каталога имеет пробелы в нем. Окончательный результат foo/
.unzip -l
перечислить содержание архива и проанализировать выводdiff
-m1
на grep
и я не знал о cut
печать в конец через -fN-
(опускающий последнее полевое число). Вы преподавали мне что-то! Для этого-> upvote! Разве Вы не использовали всего один инструмент (например. awk
) потому что 1. grep
и cut
более широко распространены, чем awk
и 2. Вы находите то, что Вы записали более "читаемый"? Я хотел бы услышать Ваше объяснение, так как можно было придумать остроту, как so:stackoverflow.com/questions/15776352 PS: Вам не нужны кавычки, никакое разделение слова в ударе в переменное время присвоения. v=$(echo a b)
совпадает с v="$(echo a b)"
---------Решение--------85919----121 Evan является более прямым: извлечения и синтаксические анализы имя dir.. (хотя Ваша идея хороша, и основание для решения Evan.. для этого - я - upvoting с благодарностью..)
– Robottinosino
04.04.2013, 03:27
Файловая система AVFS представляет представление файловой системы где каждый архивный файл /path/to/foo.zip
доступно как каталог ~/.avfs/path/to/foo.zip#
.
mountavfs
ls ~/.avfs$PWD/foo.zip\#
Если это ls
управляйте показывает, что единственный каталог, затем разархивировав zip-файл создаст тот каталог и создаст файлы под ним. Действительно обратите внимание, что zip-файл может или не может быть организован этот путь.
Вот отрывок, который проверяет Ваше предположение и наборы dir
к имени каталога если применимо. Предупреждение: если zip-файл содержит файлы, имя которых начинается с a .
(отметьте точкой файлы), они проигнорированы.
zip_directory_name () {
case $1 in
/*) ;;
*) set "$PWD/$1";;
esac
cd ~/.avfs${1}\# || exit 2
set -- *
if [ $# -eq 1 ] && [ -d "$1" ]; then
printf %s "$1"
else
return 1 # more than one top-level file, or a single non-directory
fi
}
dir=$(zip_directory_name foo.zip) || exit $?
Будьте недовольны своим обходным решением, если Вам нравится, но это - на самом деле правильное решение.
d="`mktemp -d`"
unzip -d "$d" "$zipfile"
v="`basename "$d"/*`"
mv "$d"/"$v" "$v"
rmdir "$d"
echo "$v"
Это является подробным, но - пока действительно существует только один dir в zipfile, который необходимо, вероятно, проверить сначала - это надежно.
ls
и grep
менее надежно, потому что это зависит от того, как произведенный похож. В другой локали не может быть никакого "создания": строка. В следующей версии разархивировали, она могла быть изменена по любым причинам.
-m1
наgrep
и я не знал оcut
печать в конец через-fN-
(опускающий последнее полевое число). Вы преподавали мне что-то! Для этого-> upvote! Разве Вы не использовали всего один инструмент (например.awk
) потому что 1.grep
иcut
более широко распространены, чемawk
и 2. Вы находите то, что Вы записали более "читаемый"? Я хотел бы услышать Ваше объяснение, так как можно было придумать остроту, как so:stackoverflow.com/questions/15776352 PS: Вам не нужны кавычки, никакое разделение слова в ударе в переменное время присвоения.v=$(echo a b)
совпадает сv="$(echo a b)"
– Robottinosino 04.04.2013, 03:26cut
чем с ним сawk
. Это также более читаемо, по-моему. Та острота интересна. Я должен буду читать больше оawk
. Используя кавычки в переменных присвоениях моя дурная привычка, которая следовала из текстового редактора, который окрасил текст в кавычках приятно. Кроме того, мой язык по умолчанию является C. – 04.04.2013, 16:53