ディレクトリがあります
私の主なディレクトリは/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
これは、最も古い/最新の選択したディレクトリとファイルの間に違いがないため、望ましくない場合はディレクトリを削除するように出力をフィルタリングする必要があります。