我想在 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