使用带FSELECT的对话框的基本文件资源管理器:Bash

时间:2015-08-03 21:52:07

标签: bash dialog

正如标题所说,我试图做一个基本的文件浏览器。我想要做的是向用户提供一个对话框,允许他们选择一个文件,在本例中是.rar文件,但我希望他们能够选择放置文件的目录。他们每个人都倾向于命名以不同方式放置这些.rar文件的目录,这就是为什么我想让他们使用对话框在目录之间导航。

到目前为止,我已经提出了这个问题:

#!/bin/bash

# select a file with a dialog box
# save it in FILE

# If the user picks another directory, show the content of the new directory
# The script must keep iterating between directories until the correct files
# are chosen. This must be done recursively.

FILE=$(dialog --clear --title "File Viewer" --stdout \
       --title "Select a file"\
       --fselect /recursos/ 14 58)

# Here I try to keep iterating between directories
while [ -d "$FILE" ]
do
  # If the user picks a directory
  if [ -d "$FILE" ]
  then       
    cd "$FILE"  # Change path to that directory
    DIR=$PWD    # Save the new path
    FILE=""     # Clear the selection
    dialog --clear   # Destroy previous dialog box
  else
    echo "Error."
    exit -1
  fi

  # Show a new dialog and allow a new selection
  FILE=$(dialog --clear --title "File Viewer" --stdout \
         --title "Select a file"\
         --fselect "$DIR" 14 58)
         echo "Value of $FILE inside the while"
         exit -1   # Exit
done

# Print the name of the file
echo $FILE

我在while循环中使用强制退出,因为我想测试$ FILE的值,无论如何,它没有按预期工作。我还没有找到如何在目录之间进行迭代的示例。我无法使用Zenity或任何其他可视UI,因为我正在处理的服务器没有互联网,我无法向操作系统下载新功能或任何内容。另外,我不能使用--dselect作为Dialog的一个选项,我不知道为什么,所以你看到它是我可以使用的。

关于如何做到这一点的任何想法?

修改:

好的,这就是我想做的事情。有时,我工作的人会收到一些文件,他们会被压缩为.rar文件。他们将这些文件放在一个文件夹中,然后他们在到达日期后命名目录,让我们说JUN30或其他东西。但是他们随意命名文件夹,他们经常这样做,他们在命名这些目录时不遵循任何规则。

我想创建一个脚本,允许他们导航到他们放置这些压缩文件的文件夹,选择文件,一旦他们按下OK,程序将执行一系列步骤,这些步骤在这些文件被解压缩后完成

允许用户输入放置压缩文件的文件夹似乎不可行,因为视觉上工作会更容易。你知道,我不希望用户能够过多地搞乱。这样做是必要的,因为解压缩文件只是许多人的第一步,我被分配了自动执行大量任务。

修改

我改变了我的代码工作方式有点不同,因为旧的方式并没有做我想要的,这是我到目前为止所拥有的:

#!/bin/bash

function fileChooser(){
  local __DIR=$1
  local __RESULT=$(dialog --clear --title "Choose Directory" --stdout \
                   --title "Choose File"\
                   --fselect $__DIR 14 58)

  echo $__RESULT
}

RESULT=$( fileChooser /recursos/ )

while [ -d "$RESULT" ]
do
  RESULT=$( fileChooser "$RESULT/" )
done

# Print selection
echo $RESULT

我应该改进哪些建议,以使我的代码尽可能安全无故障?目的是除了选择带有文件的目录之外,用户应该能够执行一堆自动化任务而不需要太多干预。

0 个答案:

没有答案