mv 一堆文件,但询问每个文件

mv 一堆文件,但询问每个文件

我想在 Linux 上移动一堆文件,例如

mv *.jpg /tmp/

但我想被要求提供每个文件,例如

mv --ask-me *.jpg /tmp/

do you want to move a.jpg? y/n y
do you want to move b.jpg? y/n n

有执行此任务的命令吗?我知道mv -i,但我想提示每个文件,并且mv -i只提示现有文件。

答案1

您可以使用-p的(提示)选项xargs-ok谓词find

find ./*.jpg -prune -ok mv {} dest/directory/ ';'
printf '%s\0' *.jpg | xargs -0pI@ mv -- @ dest/directory/

(这里假设一个xargs实现支持现在常见且即将推出的标准-0扩展)。

答案2

另一种方法,如果您的 shell 是,则与(交互式)选项一起zsh使用:它显示要执行的每一行并询问用户是否执行它。zmv-i

autoload zmv
zmv -i -- '*.jpg' /tmp

打印例如

mv -- one.jpg /tmp
Execute?

等等...Y或者y将执行它,其他任何内容都会跳过它。请记住,zmv还有一个-n选项(不执行:打印会发生什么,但不执行)。

答案3

你可以尝试这样的事情:

for i in *.jpg
do
printf 'do you want to move "%s"? ' "$i" >&2
read ans
if [ "$ans" = "y" ]
then mv -- "$i" /tmp
fi
done

相关内容