最新のファイルタイムスタンプを使用したディレクトリの作成

最新のファイルタイムスタンプを使用したディレクトリの作成

ディレクトリ内の最新のファイルの2つのタイムスタンプに基づいてディレクトリを作成し、その2つのファイルを新しく作成されたディレクトリにコピーしようとしています。たとえば、

-rw-r--r-- 1 root root 0 Sep 24 12:01 a

-rw-r--r-- 1 root root 0 Sep 24 12:01 b

というディレクトリを作成し、現在のディレクトリの最新ファイルであるそのディレクトリに20190924コピーしたいと思います。ab

答え1

このzshスクリプトは、現在のディレクトリから2つの最新の(一般的な)ファイルを選択し、最新のファイルの修正タイムスタンプを収集し、そのタイムスタンプをYYYYmmdd形式に変換し、ディレクトリを作成してから、2つの最新ファイルをディレクトリにコピーします。

#!/bin/zsh

newest2=( *(.om[1,2]) )
dsec=$( stat -c %Y "${newest2[1]}" )
dnam=$( date -d @"$dsec" +%Y%m%d )
mkdir "$dnam"
cp -- "${newest2[@]}" "$dnam"

最初の行では、修飾子(括弧内)を使用してワイルドカードを拡張して割り当てますnewest2*資格要件:

  • .--純粋なファイル
  • om- 修正時間に基づいて並べ替え(最新の項目から古い項目の順に)
  • [1,2]- 1から2までの要素のみを含むようにリストを分割します。

stat次に、最新のファイルの修正時間(秒単位)を要求します。この日付は、date私たちが望む形式でディレクトリ名を返すGNUに渡されます。ディレクトリを作成した後、このcpコマンドは両方のファイルをディレクトリにコピーします。

答え2

ここで私たちはあなたが始めたいと思います最初文書:

ディレクトリの作成

dir="$(mkdir -p $(ls -ltp --full-time | grep -v / | awk '{print $6}' | sed -n '2p' | sed 's/-//g'))"

grep -v /時間別にソートされ、全体の時間を表示するファイルのみをリストしますlt(日付があります)--full-time

ls -ltp --full-time | grep -v /

日付列の選択

awk '{print $6}'

最初のファイルに対応する2行目を検索し(最初の行はファイル数を表示します)、ダッシュを削除します。

sed -n '2p' | sed 's/-//g'

ファイルのコピー

cp $(ls -ltp --full-time | grep -v / | awk '{print $9}' | sed -n '2,3p' | tr '\n' ' ') "${dir}/"

grep -v /時間別にソートされ、全体の時間を表示するファイルのみをリストしますlt(日付があります)--full-time

ls -ltp --full-time | grep -v /

ファイル名を検索します。

awk '{print $9}'

最初のファイルと2番目のファイルを選択してください。

sed -n '2,3p'

1行にコピーできるように、新しい行を空白に置き換えます。

tr '\n' ' '

コマンドは次のとおりです。

cp x z 20190924/

関連情報