특정 디렉터리에 있는 파일을 표시한 다음 파일 중 하나를 선택하고 삭제할 수 있기를 원합니다.
지금까지 내가 찾은 내용은 다음과 같습니다. 누구든지 도와줄 수 있나요?
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
목록을 얻는 가장 좋은 방법이 아닙니다.