最近の現地時間の1530〜1730など、指定した時間間隔で書き込まれたファイルを選択して移動するにはどうすればよいですか?
背景:私はLinux Fedora 12を使用しており、新しいコンピューターでrsync)を使用して、最新のFedoraリリースにアップグレードする準備として、ホームディレクトリを外部ハードドライブにバックアップしました。。残念ながら、正しく動作することを確認するために多くのドライランを実行しましたが、宛先ファイルの仕様を誤解し、バックアップされたすべてのファイル(32Gbで60000ファイル)が独自のディスクコンテンツではなく元のディスクコンテンツと混合されました別のディレクトリ。そこで、バックアップにかかった時間に保存されたすべてのファイルを選択して、別のディレクトリに移動したいと思います。
Stephane Chazelas で提案されているように、find
を使用して、 ctime を確認できます。
バックアップが200分前に開始され、100分前に終了したとすると、その間隔にctimeがあるものがすべて見つかります。
find -cmin -200 -cmin +100
ドライランを行い、見た目が良ければ、それに基づいてレストランを建設します。
更新:
ファイルを移動するための一般的な開始点は、次のようになります(実際には、echo
をmv
に削除します)。
find source --mindepth 1 -cmin -200 -cmin +100 -exec echo mv -v "{}" target \;
どこ --mindepth 1
は、source
自体が移動するのを防ぐのに役立ちます(その場合は、mv source target
)、および"{}"
は、スペースを含むパス名に対してmv
を機能させます。改行やその他の異常な文字を含むパス名がない限り、これは通常の場合をカバーするはずです。
移動したばかりのサブディレクトリを検索できない場合にfind
からの警告を回避するために、最初にディレクトリを移動することをお勧めします。 -type d
:
find source -type d --mindepth 1 -cmin -200 -cmin +100 -exec echo mv -v "{}" target \;
いつものように:最初にドライラン(echo
)を実行して、何が起こるかをシミュレートします。 これはStack Overflowからの同様の議論です
@grebnekeが提案したように、ファイルを移動するのに役立つコマンドに従ってください
find . ! -path . -cmin -200 -cmin +100 -exec echo mv -v {} /tmp/ \;
echo
を使用したため、これもドライランです。出力が良好に見える場合は、エコーを削除してファイルを移動できます。
コマンドの説明を見つける
.
どこを見れば! -path .
現在のディレクトリを除外します-cmin -200
200分前-cmin +100
100分前-exec
コマンドを実行します{ }
文字列{}が一致するファイル名に置き換えられました\;
-exec
変数に提供された引数の終わりを示すため、そこにある必要があります