我有一个目录
我的主要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
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
以删除目录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句