我希望能够显示给定目录下的文件,然后选择其中一个文件并能够将其删除。
这是我到目前为止所发现的。有人可以帮忙吗?
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
并不是获得列表的最佳方法