2015-07-21 3 views
0

Я хочу, чтобы пользователь выбирал файл из любого места, используя zenity, и скрипт обнаруживает расширение файла, например (.tar.gz) или (.zip) , и соответственно выполнять соответствующие действия. Вот пример.Отобразить имя файла для всех файлов с определенным расширением

#! /bin/bash 

FILE=$(zenity --file-selection --title="Select a file to check") 
echo "File: $FILE" 

if [ "$FILE" = "*.zip" ] 
then 
    echo "File that is a .zip found" 
    FILENAMENOEXT="${FILE%.*}" 
    echo "Filename with extention $FILENAMENOEXT" 
    #Perform xx action to $FILE if it is a zip 

elif [ "$FILE" = "*.tar.gz" ] 
then 
echo "File is a .tar.gz found" 
FILENAMENOEXT="${FILE%.tar.*}" 
echo "Filename with extention $FILENAMENOEXT" 
#Perform xx action to $FILE if it is a t.tar.gz 

else 
    echo "File is neither .zip nor .tar.gz" 
fi 

echo "test $FILENAMENOEXT" 
+1

Side Примечание: если вы хотите, чтобы ваш инструмент распознавать файлы по их содержанию (например, потому, что некоторые файлы '.tar.gz' в то время как другие являются' .tgz'), то 'file' Util может пригодиться , Например. 'file -b --mime-type something.tar.gz' даст вам' application/gzip'. – tarleb

+0

, что вы хотите выполнить после получения файлов .zip и .tar.gz? –

ответ

2

Это почти правильно.

Вам необходимо использовать [[, чтобы выполнить сопоставление образцов и кавычки, чтобы отключить сопоставление образцов.

Итак, вместо [ "$FILE" = "*.zip" ] вы хотите [[ "$FILE" = *".zip" ]] и вместо [ "$FILE" = "*.tar.gz" ] вы хотите [[ "$FILE" = *".tar.gz" ]].

Вы также можете использовать инструкцию case вместо if/elif.

case "$FILE" in 
*.zip) 
    echo "File that is a .zip found" 
    ;; 
*.tar.gz) 
    echo "File is a .tar.gz found" 
    ;; 
*) 
    echo "File is neither .zip nor .tar.gz" 
    ;; 
esac 
Смежные вопросы