아래와 같이 대화형으로 일부 mp3 파일을 삭제하고 싶습니다.
$ for i in *.mp3; do mplayer "$i"; echo "$i"; sleep 5; interactive_code; done
Interactive_code는 내가 누르면 "$i" 파일을 삭제해야 하고, 를 누르면 해당 파일을 디렉터리로 이동해야 하며 rm
, 스페이스바를 누르면 루프를 계속해야 합니다.tmp
mv
답변1
이 스크립트는 다음을 수행해야 합니다.
#!/usr/bin/env bash
for i in ./*.mp3; do
mplayer "${i}"
printf '%s\n' "${i}"
read -p 'What to do?: ' -r ans
if [[ "${ans}" == 'rm' ]]; then
rm "${i}"
elif [[ "${ans}" == 'mv' ]]; then
mv "${i}" 'tmp'
fi
done
추신: 이는 tmp
디렉토리가 이미 존재하고 현재 작업 디렉토리에 있다고 가정합니다. 다른 곳에 있거나 해당 /tmp
디렉터리를 참조하는 경우 코드의 해당 부분을 변경하면 됩니다.
답변2
검증되지 않은. 이는 두 가지 힌트를 제공하므로 정확히 귀하가 요청한 내용이 아닙니다. "y"를 입력하고 Enter 키를 누릅니다.첫 번째파일을 이동하라는 프롬프트 /tmp
(이 경우 두 번째 프롬프트는 건너뛰게 됩니다) 또는 'y'를 전달하십시오.두번째파일을 삭제하라는 메시지가 표시됩니다. 두 프롬프트를 모두 무시하고(Enter 키를 누름) 아무 작업도 수행하지 않고 계속합니다.
find *.mp3 -type f -exec mplayer {} \; \( \
-ok mv -i {} /tmp \; -o \
-ok rm {} \; \)
답변3
그러면 파일을 재생한 후 사용자에게 메뉴가 제공됩니다.
TMPDIR=${TMPDIR:-/tmp}
for name in ./*.mp3; do
test -f "$name" || continue
printf 'Playing "%s"...\n' "$name"
mplayer "$name"
select ch in "Move $name to $TMPDIR" "Remove $name"; do
case "$REPLY" in
1) mv "$name" "$TMPDIR" ;;
2) rm "$name" ;;
*) echo 'Invalid choice' >&2
continue ;;
esac
break
done
done
이 스크립트는 필수가 아니며 bash
어떤 sh
쉘에서도 가능합니다.