![特定のディレクトリのファイルのリストから最新のファイルをインポートする方法は? [閉鎖]](https://linux33.com/image/37201/%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E6%9C%80%E6%96%B0%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
特定のディレクトリのファイルのリストから最新のファイルをインポートする必要があります。
最初にスクリプトを実行したときに、特定のディレクトリのファイルのリストを別のディレクトリにコピーしました。
2回目の実行以降、同じディレクトリにあるファイルのリストから最新のファイルをインポートし、そのファイルを別のディレクトリにコピーする必要があります。
最初の実行では、最後のファイルの作成日を変数にキャプチャし、スクリプトが2回目の実行時にファイルを最初の実行の最後のファイル作成日より後にコピーする必要がありました。別のディレクトリ。
誰でも最新のファイルを入手するのに役立ちますか?
答え1
ls -t1 | head -n 1
最初のエントリはアクセス時間でソートされたすべてのファイルを一覧表示し、後者は最初の行を選択します。
答え2
zshの現在のディレクトリの最新のファイルは次のとおりです。
a=(*(om[1]))
latest_file=$a[1]
cp -p $latest_file /other/directory
(グローバル予選素晴らしいですが、残念ながら要素を1つだけ要求しても、結果はまだリストなので一時的な配列ですa
。 )
他のシェルでファイル名に改行や印刷できない文字を含めることができないことがわかっている場合は、次のようにしますls
。
latest_file=$(ls -t | head -n 1)
cp -p "$latest_file" /other/directory
ところで、実際に求められるのは、特定のファイルよりも最新のファイルリストのようです。これを行うには、-cnewer
組み込み機能を使用して、find
他の特定のファイルよりも最近コンテンツやメタデータが変更されたファイルを検出できます。ここで私が呼び出す方法は、find
サブディレクトリのファイルも収集することに注意してください。
find . -cnewer "$previous_latest_files" -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
以前の最新のファイルの検索に問題が残っています。実際に重要なのはコピー日です。したがって、コピー時にタグファイルが生成されます。
find . -cnewer marker_file -exec sh -c 'cp -p "$@" "$0"' /other/directory {} +
touch marker_file
ファイルがターゲットディレクトリに残っている場合は、両方のディレクトリを簡単に同期できます。ターゲットディレクトリから古いファイルの一部を削除してもソースディレクトリに残っている場合は、この方法を使用して再コピーされます。
rsync -a . /other/directory/
答え3
変更時間に基づいてあるディレクトリから別のディレクトリにファイルをコピーする場合は、次のrsync
作業を実行する非常に簡単な方法を検討できます。
rsync -t ./dir1/ ./dir2/
または、次を追加してどのようなことを行うかを確認してください。
rsync -t --list-only ./dir1/ ./dir2/
-t
Gillesが以下の説明で指摘したように、このオプションを無効にすることができます。しかし、それから何かを奪うなら、それはあなたです。できるそしてテストすべきrsync
このオプションは、目的の結果を得る--list-only
非常に簡単な方法です。
また、多分...
man rsync
答え4
実際の目標が修正時間に基づいて複数のファイルを移動することであり、システムバージョンがテストタイプをサポートしているfind
場合は、-newerXY
次のようにします。
find -type f -newermt "@$lasttime" -exec mv -t path/to/destination/ {} +
$lasttime
エポック以降に以前に保存されたファイルの変更時間(たとえば、で取得した時間stat -c %Y yourfile
)はどこにありますか?
参照ファイルのタイムスタンプを変数に保存する代わりに、find -newer somefile
ORを直接使用して変更時間を参照ファイルの修正時間と比較することもできます。find -newermm somefile
選択を現在のディレクトリ(サブディレクトリを除く)に制限するには、-maxdepth 1
コマンドにを追加しますfind
。