これは一般的なLinuxの質問かもしれませんが、ここで試してみます。
最近変更されたファイルのリストが非常に頻繁に必要であり、現在、そのためにls
出力をgrep
にパイプして、今日または特定の時間にパラメーターを指定しますが、grep
paramは頻繁に更新されたリストを取得するため、少し非生産的です。
特定のパスで最後に変更されたファイルをリストする簡単なコマンドはありますか?
特定のディレクトリから最後に変更された5つのファイルを再帰的に検索するには、そのディレクトリから次を実行します。
find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
%T@
with -printf
の述語find
はファイルのエポック以降の修正時間を取得し、%p
はファイル名を出力します
sort -k1,1nr
はエポック時間に従って結果を数値的に反転しますsort
head -5
は、最後に変更された5つのファイル名を取得します
現在のディレクトリでのみ(再帰的にではなく)検索する場合は、stat
を使用します。
stat -c '%Y %n' * | sort -k1,1nr | head -5
またはfind
:
find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
man find
およびman stat
を確認して、より多くのアイデアを得てください。
以下のスクリプトは、ディレクトリ内のすべてのファイルを再帰的にリストし、任意の時間よりも短い時間前に編集します。さらに、最後の編集以降の期間が表示されます。
次のコマンドで使用できます。
findrecent <directory> <time(in hours)>
以下に示すように:
この例では、36時間以内に編集されたデスクトップ上のすべてのファイルがリストされます。
#!/usr/bin/env python3
import os
import time
import sys
directory = sys.argv[1]
try:
t = int(sys.argv[2])
except IndexError:
t = 1
currtime = time.time(); t = t*3600
def calc_time(minutes):
# create neatly displayed time
if minutes < 60:
return "[edited "+str(minutes)+" minutes ago]"
else:
hrs = int(minutes/60); minutes = int(minutes - hrs*60)
return "[edited "+str(hrs)+" hours and "+str(minutes)+" minutes ago]"
for root, dirs, files in os.walk(directory):
for file in files:
file = os.path.join(root, file); ftime = os.path.getctime(file)
edited = currtime - ftime
if edited < t:
print(file, calc_time(int(edited/60)))
~/bin
を作成します~/bin
にfindrecent
として保存します実際にはとても簡単です。カラントディレクトリにある最新のファイルを取得するには:
ls -Art | tail -n 2
/ opt/spark /などの別のディレクトリにある最新のファイルを取得するには:
ls /opt/spark/ -Art | tail -n 1
これは、クラスターで使用する場合です。
aa23916@picard03:/opt/spark/applicationHistory$ ls -Art | tail -n 2
app-20180124162809-0004
app-20180124163207-0005.inprogress
シンプルで簡単:)