複数のファイルを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

シェルのもう1つのアプローチは、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

関連情報