
私はディレクトリを持っています
私のメインDIRは/tmp/folder
中には/tmp/folder
X個のフォルダのみ(ファイルではありません)があります。例えば
/tmp/folder/1
/tmp/folder/2
/tmp/folder/3
/tmp/folder/4
/tmp/folder/5
これらのフォルダー内には、同じ拡張子のファイルが多数あります。これらのフォルダーのそれぞれから、最後に作成されたファイルと最初に作成されたファイル (変更時刻) を取得したいと考えています。
私が好む出力は次のようになります
/tmp/folder/1,OLD_FILE,NEW_FILE
/tmp/folder/2,OLD_FILE,NEW_FILE
/tmp/folder/3,OLD_FILE,NEW_FILE
/tmp/folder/4,OLD_FILE,NEW_FILE
/tmp/folder/5,OLD_FILE,NEW_FILE
この出力はスクリプトを使用して解析しますので、必要な出力を行うことができますが、簡単に解析できるようにフレンドリーな方法で実行してください。
bashコマンドは1つだけ
答え1
find "$DIR" -type d | while read d; do echo "$d,$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')"; done
または、より読みやすい形式で、デモンストレーション用に追加の変数を使用して次のようにします。
find "$DIR" -type d |
while read d;
do
files=$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')
printf '%s,%s\n' "$d" "$files";
done
これは、コマンド$DIR
を使用してのすべてのサブディレクトリを検索しますfind
。見つかったサブディレクトリごとに、 を使用して、ls -tr
そのディレクトリ内のファイルのリストを日付順に新しい順に取得します。
の出力をパイプし、最初の行と最後の行をコンマで結合します。オプションはls -tr
デフォルトの出力を抑制し、最初の行(最新のファイル名)をsed
-n
1h
スペースを保持する、そしてファイルの最後の行( によって選択される$
)で、ホールドスペース(最新のファイル名)をH
パターンスペース(改行で区切られる)に追加し、その改行をカンマに変更します。
次に、スクリプトはprintf
サブディレクトリ名の後にコンマを付け、その後にそこから取得したファイルを続けますsed
。
これは、最も古い/最も新しい選択においてディレクトリとファイルを区別しないため、そこにディレクトリが必要ない場合は、出力をフィルタリングしてls -t
ディレクトリを削除する必要があります。