定義された古いファイルをソースディレクトリからターゲットディレクトリに移動するために、次のスクリプトを作成しました。それは非常にうまく動作します。
#!/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`を使用すると、データが失われる可能性があります。