以下のようにインタラクティブにいくつかの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
PS:これはtmp
ディレクトリがすでに存在し、現在の作業ディレクトリにあると仮定します。別の場所にある場合、またはその/tmp
ディレクトリを参照している場合は、コードの対応する部分を変更するだけです。
答え2
検証されていません。これは2つのヒントを提供するので、正確にあなたが要求したものではありません。 「y」と入力し、Enter キーを押します。最初ファイルを移動するように求めるプロンプト/tmp
(この場合、2番目のプロンプトはスキップされます)または「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
シェルでも可能です。