Как проверить, является ли файл tar-файлом в оболочке Bash? - PullRequest
0 голосов
/ 07 мая 2018

Мой вопрос о Bash, Shell. Я пишу сценарий, и у меня есть следующая проблема: У меня есть случай, когда пользователь заявляет, что он или она будет извлекать файл в каталог. Но я должен проверить, существует ли существование, и если существует необходимость проверить, является ли этот файл * .tar файлом. Я искал подобное, когда проверял, является ли файл исполняемым:

if [ -x "file" ]; then
 echo "file is executable"
else
 echo "file is not executable"

# will this if test work?
case $1
"--extract")
 if [ -e $2 ] && [ tar -tzf $2 >/dev/null ]; then
  echo "file exists and is tar archive"
 else
  echo "file either does not exists or it is not .tar arcive"
 fi
;;
esac

Код сверху не работает, он полностью игнорируется. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Я бы просто посмотрел, может ли tar указать файл:

if ! { tar ztf "$file" || tar tf "$file"; } >/dev/null 2>&1; then
    echo "$file is not a tar file"
fi
0 голосов
/ 07 мая 2018

Хорошо, я нашел ответ. Я знаю, что это не самый оптимальный вариант, однако он работает так, как я задумал. Я помещаю case $ 1 от пользователя в переменную и создаю другую переменную, равную "* .tar.gz", а затем в операторе if я сравниваю var1 (пользовательский ввод в виде строки) с var2 euqal с "* tar.gz", и это работает. Спасибо за все ответы :) Если кто-нибудь знает, как его улучшить, пожалуйста, дайте мне знать. Привет

0 голосов
/ 07 мая 2018

file команда может определить тип файла:

file my.tar

если это tar файл, он выведет:

my.tar: POSIX tar archive (GNU)

Затем вы можете использовать grep для проверки выходных данных (содержит или нет tar архив ):

file my.tar | grep -q 'tar archive; && echo "I'm tar" || echo "I'm not tar"

Если файл не существует, вывод файла будет (с кодом выхода 0):

do-not-exist.txt: cannot open `do-not-exist.txt' (No such file or directory).

Вы можете использовать оператор case для обработки файлов нескольких типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...