scpを使用してサーバー上の1つのディレクトリをバックアップしたいと思います。しかし、私の問題は、バックアップディレクトリにファイル(古いファイルと新しいファイル)が多すぎるということです。 。
ファイル1 - 最終修正日:2022-10-11
ファイル2 - 最終修正日:2022-10-12
ファイル3 - 最終修正日:2022-10-13
ファイル4 - 最終修正日:2022-10-14
それでは、findコマンドを使用してファイル4を選択する方法は?新しいファイルを選択した場合そして、scpコマンドを使用して新しいファイルのみをコピーできると思ったからです。非常にありがとう
答え1
zsh シェルの使用:
scp ./file*(.om[1]) host:target/dir/
scp
現在の作業ディレクトリ.
の名前はfile
。
GNUユーティリティとBourneに似たシェルを使用すると、次のことができます。
{
{
LC_ALL=C find . -maxdepth 1 -name 'file*' -type f -printf '%T@\t%p\0' |
LC_ALL=C sort -z -k1,1rn |
head -zn1 |
cut -zf2-
} 4<&- |
xargs -0a /dev/fd/3 -I FILE scp FILE host:target/dir/ 3<&0 <&4 4<&-
} 4<&0
(検証されていません)。
BSD / GNUを使用して現地時間2022-10-14T00:00:00以降に最後に変更されたファイルを選択するには、次の手順を実行しますfind
。
LC_ALL=C find . -maxdepth 1 -name 'file*' -type f -newermt 2022-10-14 \
-exec sh -c 'exec scp "$@" host:target/dir/' sh {} +
または以下を使用してzsh
:
autoload after
scp ./file*(.e['after 2022-10-14']) host:target/dir/
(find
sとは対照的に、-newermt
2022-10-14T00:00:00.000000000で修正されたファイルも転送されます。)
サブディレクトリのファイルも考慮するには、から削除またはに-maxdepth 1
置き換え./file
ます。隠しディレクトリのファイルも考慮されます。この動作が必要な場合は、glob修飾子を追加してください。非表示のディレクトリ除外は、呼び出し名が次に始まるディレクトリ(ここでは起動ディレクトリ)以外のディレクトリです。./**/file
zsh
find
D
zsh
find
-prune
.
.
LC_ALL=C find . -name '.?*' -prune -o ...
答え2
このfind
コマンドには、時間ごとにファイルを検索する組み込みオプションがあります。
ついに書く時間(私は好きです改訂する):
find . -mtime n
ついに読む時間(例:使用する権利):
find . -atime n
+n
~のためN仕事以上-n
~のためN仕事以下n
ただN空
完全な例:
find . -mtime +6 -type f
現在のディレクトリとそのサブディレクトリで7日以上変更されたすべてのファイルを見つけます。
追加情報ここ。
答え3
これは最後のファイルの検索に関する特定の質問に対する答えではありませんが、バックアップ目的でrsync
代わりに使用することをお勧めしますscp
。
マニュアルページからrsync(1)
:
rsyncはscpとほぼ同じように動作しますが、より多くのオプションがあり、rsyncリモートアップデートプロトコルを使用してパフォーマンスを大幅に向上させるプログラムです。 ターゲットファイルがすでに存在する場合は、ファイル転送速度を上げます。Rsync が広く使用されています。バックアップとミラーリング用日常的な使用のための拡張コピーコマンドとして使用されます。
Rsyncはデフォルトで「クイックチェック」アルゴリズムを使用して転送する必要があるファイルを見つけます。サイズまたは最後の変更時間が変更されたファイルを見つけます。クイックスキャン結果ファイルのデータを更新する必要がないことが表示された場合は、他の保持された属性(オプションで要求されているように)に対するすべての変更がターゲットファイルに直接適用されます。
現在の作業ディレクトリをターゲットホストにコピーする例:
rsync -avz ./ host:target/dir
-a
- アーカイブモード。これは、権限、所有者、グループ、および変更時間を維持しながらフォルダ全体を繰り返しコピーすることを意味します。-v
- 詳細を増やします。これにより、実際にコピーされたファイルが表示されます。-z
- 転送されるデータ部分のサイズを減らすために、転送中にファイルデータを圧縮します。