findコマンドを使用してディレクトリを移動する

findコマンドを使用してディレクトリを移動する

あるパスで特定のディレクトリを見つけ、find を使用してそのディレクトリを別のパスに移動しようとしています。

ソースディレクトリは以下のようになります。

/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3

date1ディレクトリを見つけて、目的地に移動しようとしています

/バックアップ/ソース1/ディレクトリ1/

私は以下のコマンドを使用しています

[root@mytest Dir1]# find -name "date1" -exec mv {} /Backup/source1/Dir1/{} \;

以下のエラーが発生します。

mv: `/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt' の所有権の保持に失敗しました: 操作は許可されていません

宛先のdate1ディレクトリの重複を削除する方法がわかりません。「./」問題も発生しています。

ご多幸をお祈りします、KJ

答え1

Linux マニュアルページ状態:

mv - ファイルを移動(名前変更)する

したがって、mvディレクトリを移動するために使用することはできません。ただし、最初にコピーしてから古いコピーを消去することはできます。このコマンド

   SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR

興味のあるディレクトリへの相対パスを便利な変数に格納します。これで、新しい位置にディレクトリを作成できます。

   mkdir /Backup/source1/$SRC_DIR

権限がある場合: 実際、上記のエラー メッセージは、新しいファイルを作成する権限が不十分であることを示しています (フォルダーであるはずが、上記のエラーのためにファイルになっています)。新しい /Backup/dir1 があなたのものであることは確かですか? それを確認して修正する必要があります。

これで、すべてのコンテンツを新しいディレクトリに再帰的に cp できます。

   cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
   cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR

最後に、必要に応じて古いコピーを消去できます。

   cd $SRC_DIR
   rm -fR *
   rm -fR .[a-Z]* 

これでディレクトリは空になり、消去できるようになります。

答え2

Blunt ツールである move を使用する代わりに、アクセス許可とソフト シンボリック リンクとハード シンボリック リンクの両方を保持するアーカイブ モードでディレクトリ ツリーを移動できる rsync を調べてください。

また、root として入力すると、インストールされたパッケージのさまざまなパス ツリーにあるファイルのデータベースupdatedbが更新されます。バイナリ、man ページ、ソース ツリー。またはを使用して検索すると、毎回実際のディスク検索を実行するよりもはるかに高速になります。locatewhereislocate

関連情報