대화 상자 메뉴에 파일이 표시되고 하나를 선택한 다음 삭제할 수 있습니다.

대화 상자 메뉴에 파일이 표시되고 하나를 선택한 다음 삭제할 수 있습니다.

특정 디렉터리에 있는 파일을 표시한 다음 파일 중 하나를 선택하고 삭제할 수 있기를 원합니다.

지금까지 내가 찾은 내용은 다음과 같습니다. 누구든지 도와줄 수 있나요?

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목록을 얻는 가장 좋은 방법이 아닙니다.

관련 정보