現在のディレクトリとサブディレクトリですべての.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 \;
mv
GNUユーティリティ(Linuxなど)を使用すると、ディレクトリごとに一度だけ実行していくつかの最適化を実行できます。
find -iname '*.jpg' -execdir mkdir -p images \; -execdir mv -t images {} +