エラーmvターゲットがディレクトリではなく、 '-exec'パラメータがありません。

エラーmvターゲットがディレクトリではなく、 '-exec'パラメータがありません。

test*.txt私はRed Hat Enterprise Linux Serverバージョン7.5(Maipo)で10日前6ヶ月前に指定されたすべてのファイルを見つけるスクリプトを作成しています。コピーした元のディレクトリには有効なファイルが含まれていますが、ファイルを移動しようとするとエラーが発生します。スクリプトとエラーメッセージは次のとおりです。なぜ失敗し、それを解決するにはどうすればよいですか?

find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

mv: target    /INTER/f/d/o/test1.txt    is not a directory
mv: target    /INTER/f/d/o/test2.txt    is not a directory
mv: target    /INTER/f/d/o/test3.txt    is not a directory
mv: target    /INTER/f/d/o/test4.txt    is not a directory

また、ファイルがアーカイブディレクトリに7か月10日間アーカイブされた後に削除します。以下のスクリプトを使用すると、次のエラーが発生します。

find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};

find: missing argument to `-exec'

答え1

最初のコマンド:

find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

ここでは、パターンに一致し、十分に古いファイルを見つけたものに移動すると仮定します。命令mvビット形式が正しくありません。次のようにする必要があります。

-exec mv {} /some/destination/path \;

つまり、「見つかったファイル({})を任意のターゲットに移動する」ということです。

ファイルを移動する場所はコマンドで明確ではありませんが、作成するとファイルが移動されます。到着パス名が見つかりました。mv複数のファイルをディレクトリ以外の場所に移動しようとすると失敗します。

2番目のコマンドでは

find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};

引数を正しく終了できませんでした-exec。最後のビットは次のようにする必要があります

-exec rm {} \;

または単に

-delete

実装がfindそれをサポートしている場合。

皆さんも見てください」「find」の-execオプションについて」。

答え2

最初のコマンド:

find ... -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;

mv引数/INTER/f/d/o/test*.txt(文字通りアスタリスクを含む)に渡され、現在/INTER_ARCHIVE/f/d/o/処理find中のファイルに渡されます。mv3つのパラメータが表示されるため、最初の2つを3番目のパラメータに移動し、3番目のパラメータをディレクトリにする必要があります。

コマンドはシェルを介して実行されないtest*.txtため、一致するファイル名には拡張されません(シェルを使用する必要があります)。ワイルドカードはここで違反するので、とにかくそれをしたくありません。find-exec-exec sh '...' \;test*.txt-mtime

おそらくあなたが望むもの

find ... -exec mv {} /INTER_ARCHIVE/f/d/o/ \;

find現在処理中のファイルをに移動します/INTER_ARCHIVE/f/d/o/

またはGNUを使用してくださいmv

find ... -exec mv -t /INTER_ARCHIVE/f/d/o/ {} +

1回の呼び出しで複数のファイルを処理しますmv

関連情報