2016-11-21 2 views
0

Я манипулируя архивный файл, и я хотел бы, чтобы проверить, существует ли файл перед извлечением егоТестирование файла в архиве дегтя

Допустим, у меня есть архивный файл под названием archive.tar и после ввода

tar -tvf Archive.Tar 

я получаю:

-rwxrwxrwx guy/root   1502 2013-10-02 20:43 Directory/File 
-rwxrwxrwx guy/root   494 2013-10-02 20:43 Dir/SubDir/Text 
drwxrwxrwx guy/root    0 2013-10-02 20:43 Directory 

Я хочу, чтобы извлечь текст в мой каталог работает, но я хочу быть уверен, что это на самом деле файл, делая это:

if [ -f Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

Результат этого теста всегда KO, и я действительно не понимаю, почему, какие-либо предложения?

+0

Как вы тестируете это «до извлечения его»? То есть, что такое 'Dir/Sub/Text', если вы ничего не извлекли? Неясно, какова ваша последовательность шагов. – kaylum

+0

В сценарии, который я пишу, я должен проверить, что 'Dir/Sub/Text' является файлом перед извлечением его с помощью tar -xvf Archive.tar Dir/Sub/Text', извините за то, что он недостаточно ясен – AlexT

+0

Я знаю это то, что вам нужно делать. Но как вы ожидаете, что скрипт, который вы показали, работает, поскольку '-f' проверяет путь? Вы не можете проверить путь, который не существует (поскольку вы его не извлекли). – kaylum

ответ

-1

Это может быть решением,

tar -tvf Archive.Tar | grep Dir/Sub/Text 

Это позволит вам знать, если это найти файл.

+0

Как это говорит вам, что это файл, а не каталог? – kaylum

0

Испытано с BSD и GNU версии дегтя, в выходе tar tf, записей, которые каталоги заканчиваются /. Так, чтобы проверить, если Dir/Sub/Text файл или каталог в архиве, вы можете просто Grep с полным согласованием линии:

if tar tf Archive.Tar | grep -x Dir/Sub/Text >/dev/null 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

Если архив содержит Dir/SubDir/Text/, то Dir/SubDir/Text является каталогом, и grep не будет соответствовать , поэтому KO будет напечатано.

Если архив содержит Dir/SubDir/Text без завершающего /, затем Dir/SubDir/Text файл и grep будет соответствовать, так OK будут распечатаны.

0
if [ ! -d Dir/Sub/Text ] 
then 
    echo "OK" 
else 
    echo "KO" 
fi 

вернется KO только если каталог текст существует и будет хорошо, если это файл или не существует (или, если быть точной также хорошо, если это будет символическим).

Смежные вопросы