-execdirを含むコマンドを見つけてフラグを読み込めませんか?

-execdirを含むコマンドを見つけてフラグを読み込めませんか?

現在のディレクトリとサブディレクトリですべての.jpgイメージファイルを見つけて、別のディレクトリに移動しようとしています。ソースファイルがターゲットファイルを上書きすると予想しましたが、これは発生しませんでした。コマンドを実行すると、一部のファイルに対して次の出力が表示されます(ただし他のファイルは移動されました)。

mv: cannot move './file' to '/destination': File exists

これは私が使用するコマンドです:

find . -iname *jpg -execdir mv -f {} \;

-f(force) オプションが機能しないようですか?

戻ってmv -f ./source/file /dest単一のファイルを処理すると、正しく上書きされます。

どうなりますか?ファイルが移動されないのはなぜですか?


更新:上記のコマンドは実際に通過したコマンドではありません(内気なため息)。実際のコマンドした@Gillesの以前の回答で提案したように目的地を含めてください。

find . -iname '*jpg' -execdir mv -f {} /destination \;

/destinationディレクトリが実際に含まれていることを確認するためにこのコマンドを再度渡しましたが、同じエラーが発生しました。

mv: cannot move './file' to '/destination': File exists

mv コマンドで /destination ディレクトリを使用しても、このエラーが表示される理由には考えられる答えはありますか?

答え1

実行中であると主張するコマンドは、受信したエラーメッセージと一致しませんが、いずれにせよ、この答えはいくつかのことを明確にするはずです。

*jpgまず、現在のディレクトリに一致するファイルがある場合、パターンは*jpgに含まれますfind。これを防ぐには、パターンを引用する必要があります。

与えたコマンドを使用すると、実行は次のようになります

cd directory && mv -f file

ただし、mvソースファイルとターゲットの2つのパラメータが必要です。

ターゲットディレクトリを渡す必要があり、使用しているため、ターゲットディレクトリはファイルを含む-execdir各ディレクトリに基づいて.jpg解釈されます。このディレクトリが必要です。.jpgすべてのファイルを単一のディレクトリに移動するには、まずディレクトリを作成して実行します。

find -iname '*.jpg' -execdir mv -f {} /common-destination-directory

すべてのファイルを相対パスに移動するには(たとえば、imagesその場所に相対的なサブディレクトリに移動する)、まずディレクトリを作成する必要があります。

find -iname '*.jpg' -execdir mkdir -p images \; -execdir mv -f {} images \;

mvGNUユーティリティ(Linuxなど)を使用すると、ディレクトリごとに一度だけ実行していくつかの最適化を実行できます。

find -iname '*.jpg' -execdir mkdir -p images \; -execdir mv -t images {} +

関連情報