对话框菜单显示文件,选择其中一个然后可以删除它

对话框菜单显示文件,选择其中一个然后可以删除它

我希望能够显示给定目录下的文件,然后选择其中一个文件并能够将其删除。

这是我到目前为止所发现的。有人可以帮忙吗?

let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 /home/admin/Desktop )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $(ls -1 /home | sed -n "`echo "$FILE p" | sed 's/ //'`")
fi

答案1

该脚本使用返回值 from 从dialog给定源目录中的文件(或目录)列表中选择一个项目。

bash 脚本的问题在于它使用两个不同的目录值:

let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 /home/admin/Desktop )
FILE=$(dialog --title "List file of directory /home" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $(ls -1 /home | sed -n "`echo "$FILE p" | sed 's/ //'`")
fi

那些是/home/admin/Desktop/home。通常的做法是将它们作为符号(即变量),并消除不一致:

#!/bin/bash
source=/home/admin/desktop 
let i=0 # define counting variable
W=() # define working array
while read -r line; do # process file by file
    let i=$i+1
    W+=($i "$line")
done < <( ls -1 $source )
FILE=$(dialog --title "List file of directory $source" --menu "Chose one" 24 80 17 "${W[@]}" 3>&2 2>&1 1>&3) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
    readlink -f $source/$(ls -1 $source | sed -n "`echo "$FILE p" | sed 's/ //'`")
fi

完成此操作后,结果readlink就可用了。

具有该修复的脚本不完整:

  • 它实际上并没有删除文件
  • 它不检查要删除的项目是文件还是目录
  • 使用(两次!)的输出ls并不是获得列表的最佳方法

相关内容