ファイルが最後に編集された日時に基づいて、フォルダー内のファイルをコピーするにはどうすればよいですか?私がすべてのファイルをコピーしたいとしましょう最終編集日 fromc:フォルダーbak。どうすればそれを達成できますか?
通常のコピーコマンドは次のように実行できることを知っています。
cp source destination
例えば。
cp *.c bak
助言がありますか?
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
が必要ですが、確かにここの誰かがそれを行うことができます(ヒント、ヒント)...
コマンドを使用して、現在のフォルダーで最後に変更したファイルを最初に指定できます
ls -lt
または、コマンドで最後にアクセスするファイルを指定したい
ls -ltu
その後、cp
コマンドでファイルをコピーできます。複数のファイルをコピーするには、 this を参照してください。