【问题标题】:Display file name of all files with certain extension显示具有特定扩展名的所有文件的文件名
【发布时间】:2015-07-21 14:09:53
【问题描述】:

我想要用户使用 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"

【问题讨论】:

  • 旁注:如果您希望您的工具通过文件内容识别文件(例如,因为某些文件是 .tar.gz 而其他文件是 .tgz),file 工具可能会派上用场。例如。 file -b --mime-type something.tar.gz 会给你application/gzip
  • 在获得 .zip 和 .tar.gz 文件后要执行什么操作?

标签: linux bash shell zenity


【解决方案1】:

这几乎是正确的。

您需要使用[[ 进行模式匹配,引号禁用模式匹配。

所以你想要[[ "$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

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多