web-dev-qa-db-ja.com

日付ごとにファイルをコピーする

ファイルが最後に編集された日時に基づいて、フォルダー内のファイルをコピーするにはどうすればよいですか?私がすべてのファイルをコピーしたいとしましょう最終編集日 fromc:フォルダーbak。どうすればそれを達成できますか?

通常のコピーコマンドは次のように実行できることを知っています。

cp source destination

例えば。

cp *.c bak

助言がありますか?

3
John

Findを使用すると、最終日に変更されたファイル(およびファイルのみ)は次の方法で検出されます。

find . -type f -mtime 1 

だからあなたはそれらをコピーすることができます

find . -type f -mtime 1  -exec cp {} bak/ \; 

意味 :現在のディレクトリ(.)の下にある、「ファイル」タイプのすべてのエンティティを検索(-type f)、 少なくとも1日後に変更 =(-mtime 1、しかし詳細はリンクをたどって詳細を確認してください)、各コマンドに対してcpコマンドを実行し、その後に前の条件に一致するファイル名とリテラルを実行しますbak/ --- exec句では、閉じているセミコロン(シェルがそれを食べないようにエスケープされている)がコマンドを閉じ、さらに、一致するたびにコマンドが1回実行されることを意味します。

ディレクトリツリーはbak/フォルダーでフラット化されるため、アーカイブ形式を使用した方がよい場合があります。

たとえば、これは私の作業ディレクトリ内のすべてのファイルのバックアップを、今日およびtarファイルで2日間変更された後、Dropboxディレクトリに移動するスクリプトです。

#! /bin/zsh 
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here  
rm -f $today $twodays
echo -n "Starting today and twodays backups... " 
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:" 
ls -lh $today $twodays
echo "Moving to Dropbox" 
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status

私は怠け者で、zshの配列構造に適応しようとしなかったので、bashが必要ですが、確かにここの誰かがそれを行うことができます(ヒント、ヒント)...

5
Rmano

コマンドを使用して、現在のフォルダーで最後に変更したファイルを最初に指定できます

ls -lt

または、コマンドで最後にアクセスするファイルを指定したい

ls -ltu

その後、cpコマンドでファイルをコピーできます。複数のファイルをコピーするには、 this を参照してください。

0
adadion