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 ...