
ファイルが最後に編集された日時に基づいてフォルダ内のファイルをコピーするにはどうすればいいでしょうか?最終編集日: 今日から: : : :私のフォルダにバックどうすればそれを実現できるでしょうか?
通常のコピー コマンドは次のように実行できることはわかっています。
cp source destination
例えば。
cp *.c bak
助言がありますか?
答え1
find を使用すると、過去 1 日に変更されたファイル (ファイルのみ) が次のようにして見つかります。
find . -type f -mtime 1
コピーするには
find . -type f -mtime 1 -exec cp {} bak/ \;
意味: 現在のディレクトリ ( .
) の下にある、タイプが「ファイル」 ( -type f
) のすべてのエンティティを検索します。少なくとも1日後に変更されました(-mtime 1
ですが、微妙なため、詳細についてはリンクをたどってください)、それぞれに対して、cp
前の条件に一致するファイル名と、句bak/
内のリテラル --- が後に続くコマンドを実行しますexec
。閉じるセミコロン (シェルによって処理されるのを避けるためにエスケープされています) はコマンドを閉じ、さらに、一致するたびにコマンドが 1 回実行されることを意味します。
ディレクトリ ツリーはbak/
フォルダー内でフラット化されるので、アーカイブ形式を使用する方がよいかもしれません。
たとえば、これは作業ディレクトリ内で今日および 2 日後に変更されたすべてのファイルを tar ファイルにバックアップし、それらを 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
が、ここで誰かがそれを実行できるはずです (ヒント、ヒント)...
答え2
まず、現在のフォルダで最後に変更したファイルをコマンドで指定することができます。
ls -lt
または、コマンドで最後にアクセスするファイルを指定する場合
ls -ltu
その後、cp
コマンドでファイルをコピーできます。複数のファイルをコピーするには、これ。