複数のディレクトリから最近変更されたファイルのコピー

複数のディレクトリから最近変更されたファイルのコピー

私はディレクトリ構造を持っていますadc/asd/abc.20150918_150635.gz... adc/asd/abc.20150921_140748.gz.gzファイル名には生成タイムスタンプが含まれています)。たとえば、asdに似た他の多くのディレクトリがあります。adc/gmf/abc.20150918_010738.gz、、adc/ret/abc.20150921_140748.gzすべてタイムスタンプのあるファイルを含みます。

単一のコマンドを使用して、すべてのディレクトリ(たとえば、など)からasd最新のgmf変更されretたファイルをコピーしたいと思います。 :).

試しましたが、cp "adc/*/abc.* ."すべてのファイルがコピーされます。 (単一コマンドを使用して)最近変更されたファイルのみをコピーしたいと思います。誰が私を助けることができますか?

ベストアンサー1

(.)各ディレクトリの最新の一般ファイルを見つけるには、まずディレクトリを見つけてから、各(/)ディレクトリで最新のファイルを見つける(mtimeまたは)2段階のアプローチが(om[1])最も適しています。 ZShellの場合:

% typeset -a latest
% cd $TMPDIR
% mkdir latest
% cd latest/
% mkdir a b c 
% touch {a,b,c}/blah; sleep 3; touch {a,b,c}/a\ newer\ file
% for d in *(/N); do latest+=( $d/*(.om[1]) ); done
% [[ $#latest -eq 0 ]] && print uh oh
% print -l $latest
a/a newer file
b/a newer file
c/a newer file
% 

説明できない理由で、ZSHでそのオプションを有効にしない限り(すべてのファイルが見つかったと仮定すると)これcp $latest destdirで十分です。SH_WORD_SPLITこの場合、他のシェルと同様に、引用の問題に対処する必要があります。

おすすめ記事