我想以交互方式删除一些 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
未经测试。这并不完全是您所要求的,因为它给出了两个提示。输入“y”并按回车键第一的提示将文件移至/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
shell 都可以。