検索を使用してファイルを移動するときにディレクトリ構造を維持する

検索を使用してファイルを移動するときにディレクトリ構造を維持する

定義された古いファイルをソースディレクトリからターゲットディレクトリに移動するために、次のスクリプトを作成しました。それは非常にうまく動作します。

#!/bin/bash

echo "Enter Your Source Directory"
read soure

echo "Enter Your Destination Directory"
read destination 

echo "Enter Days"
read days



 find "$soure" -type f -mtime "-$days" -exec mv {} "$destination" \;

  echo "Files which were $days Days old moved from $soure to $destination"

スクリプトはファイルをうまく移動し、ソースサブディレクトリでもファイルを移動しますが、ターゲットディレクトリにサブディレクトリを作成しません。このアドインを実装したいと思います。

例えば

/home/ketan     : source directory

/home/ketan/hex : source subdirectory

/home/maxi      : destination directory

このスクリプトを実行すると、16進ファイルもmaxiディレクトリに移動しますが、maxiディレクトリに同じ16進ファイルを作成し、そのファイルを本番環境で同じ16進数に移動する必要があります。

ベストアンサー1

find指定されていることを知っているがrsync

はい

同じディレクトリ構造を持つイメージファイル(ソースは同じままです):

rsync -axuv --progress Source/ Target/

同じディレクトリ構造にファイルを移動します(ソースから削除して空のディレクトリを削除します)。

rsync -axuv --prune-empty-dirs --remove-source-files --progress Source/ Target/

特定のファイル形式でファイルを移動する(はい):

rsync -rv --include '*/' --include '*.js' --exclude '*' --prune-empty-dirs Source/ Target/

find高度な検索で生成されたファイルを移動する:

cd "$source" &&
  rsync -av --remove-source-files --prune-empty-dirs --progress --files-from <(find . -type f -mtime -$days) . "$destination"

ファイル削除ガイド

rsyncターゲットディレクトリにソースディレクトリをミラーリングさせ、ソースに存在しなくなったターゲットのファイル(たとえば、、、など--delete-before--delete-after--delete-during削除するオプションがあります--delete-delay

また、ターゲットディレクトリ(例:--remove-source-files

これはユースケースによって異なり、処理方法はユーザーによって異なります。

メモ:Sridar Sarnobatが指摘したように、rsyncしたいディレクトリへのシンボリックリンクを持つディレクトリをrsyncすると、そして--remove-source-files`を使用すると、データが失われる可能性があります。

おすすめ記事