14

ディレクトリに一連のファイルがあります。特定の日付のセットのファイルを検索する必要があります (たとえば、1 月 16 日から 1 月 20 日までのファイルが必要な場合)。使用してみls -ltr | grep <date>ましたが、ファイルの選択を完了するには手順が多すぎます。これを行う簡単な方法はありますか。ありがとう!

4

3 に答える 3

21

ディレクトリにいくつのファイルがあるかわかりませんが次のようなものは驚くほど高速です。

ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 20 {print $9}'

私のシステムでは、日付がわずかに変更された次のように表示されます。

pax> ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 29 {print $9}'
kids_shares.ods
our_savings.gnumeric
photos

pax> ls -ald kids_shares.ods our_savings.gnumeric photos
-rw-r--r--   1 pax pax 51005 Jan 29 19:39 kids_shares.ods
-rw-r--r--   1 pax pax  2275 Jan 28 14:48 our_savings.gnumeric
drwxrwxrwx 130 pax pax  4096 Jan 29 21:47 photos

指定されたファイルの日付が一致していることがわかります。

注意すべきことの 1 つは、ファイルが最近のものである場合、列 8 に時間があります。ある程度の年齢を超えるとls、そこに年を入れ始めます。半年前の境界あたりのどこかだったという漠然とした記憶がありますが、完全にはわかりません. それにも対応する必要があります。

于 2013-02-05T08:29:53.257 に答える
11

代わりに使用find(1)すると、はるかに簡単になります。

find . -mtime -$start -mtime +$end
于 2013-02-05T08:25:41.437 に答える
8

を使ったほうがいいですfind。検索する特定の時刻を持つ 2 つの一時ファイルを作成することから始めます。touchこれを行うことができます:

touch -t "201301160001" ./start
touch -t "201301202359" ./finish

次に実行しますfind

find /path/to/files -type f -newer ./start ! -newer ./finish
于 2013-02-05T08:36:37.913 に答える