0

最新のファイルをターゲット ディレクトリにコピーするシェル スクリプトを作成する必要があります。次のシェルコマンドを使用します。

find . -type f -daystart -mtime -$dateoffset

最新のファイル セットが表示されます。しかし、そのリストから最新のファイルを取得して、ターゲット ディレクトリにコピーする必要があります。

ありがとう。

4

5 に答える 5

3

実際に日付スタンプを読み取って並べ替えるツールを使用する必要があるため、Bourne シェルでこれを行う方法は考えられませんが、Bourne シェルはそれを行いません。

しかし、PHPでの解決策は次のとおりです。

<?php
$fdate=array();
foreach(glob("*") as $filename)
  $fdate[filemtime($filename)]=$filename;
krsort($fdate);
print "Newest item: " . reset($fdate) . "\n";'
?>

また、たまたまBourne の代わりにbashを使用している場合、彼は連想配列を使用して必要なものを取得する回り道をしています。

#!/usr/local/bin/bash

declare -A fdate

highest=0
for file in *; do
  timestamp=$(stat -f '%m' "$file")
  fdate[$timestamp]="$file"
  if [ "$timestamp" -gt "$highest" ]; then
    highest=$timestamp
  fi
done

printf "Newest file: %s\n" "${fdate[$highest]}"

私は FreeBSD を使用しているため、このソリューションは OSX でも機能しますが、たまたま Linux を使用している場合は、statコマンドの実装が私の実装とどのように異なるかを理解する必要があります。(ヒント: を使用できるかもしれませんがstat -c '%y'、念のため。Solaris、HP/UX、OSF/1 などには、シェルから呼び出すことができるバイナリがman stat含まれていないようです。)stat

于 2012-06-08T04:09:10.650 に答える
2

更新: @ghiti のきちんとしたソリューションは、これよりも推奨されます。以下はロバストでないことが証明されています。部分的な回答として、より良い 1 行のソリューションへの道を示している可能性があるため、ここに残しておきます。

ls -1dt $(find . -type f -daystart -mtime -$dateoffset) | head -n1

ファイルを $TARGET_DIR にコピーするには、

A=$(ls -1dt $(find . -type f -daystart -mtime -$dateoffset) | head -n1)
if [ -n "$A" ] cp -u "$A" "$TARGET_DIR/$(basename $A)"
于 2012-06-08T03:18:14.797 に答える
1
find . -name "*" -type f -daystart -mtime -$dateoffset | xargs -i mv {} /where/to/put/files

また

mv `find . -name "*" -type f -daystart -mtime -$dateoffset` /where/to/put/files
于 2012-06-08T03:19:32.850 に答える
0

次のようなものを使用できます。

find . -type f -name "*" -mtime +x_NUMBER_OF_DAYS|ls -lrt|awk -F' ' '{print $(COLUMN_NUMBER_IN_WHICH_FILE_NAME_APPEARS)}'|tail -1 

これにより、特定の日付までの最新のファイルが提供されます。

上記で誰かが示唆したように、daystartはGNUフレーバーのfindにのみ存在しますが、-mtimeはより一般的なコマンドです。

PS:ファイル名にスペースが含まれていると、これも解析の問題に悩まされますが、もっとクリエイティブなものが見つかるまで、これを使用できます!

于 2012-06-08T10:30:08.850 に答える
0

-lt オプションを指定して ls コマンドを使用すると、一番上に最新のファイルが表示されます。これを使用すると、最新のファイル名を簡単に抽出できます

于 2012-06-08T08:53:40.660 に答える