ディレクトリ内の最新のファイルの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
コピーしたいと思います。a
b
答え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/