请问如何在Unix Ksh命令中完成以下方案?
我有一份工作J1,由HH:MM时间完成。我想列出这个作业J1创建的所有文件,该文件的格式为YYYYMMDDHHMMSS _?
其中YYYYMMDD是日期,HHMMSS是系统时间戳。我想在作业创建文件时,如果作业的时间戳小于文件时间戳,则列出文件,作业的时间戳将大于文件时间戳?
此致 本
答案 0 :(得分:0)
您可以使用以下内容:(假设列出的文件)
$ ls -la
total 44K
drwxr-xr-x 2 gp users 4.0K Oct 27 14:56 .
drwxr-xr-x 11 gp users 4.0K Oct 27 14:57 ..
-rw-r--r-- 1 gp users 0 Oct 23 14:45 logfile
-rw-r--r-- 1 gp users 137 Oct 27 15:09 t2t2
prw-r--r-- 1 gp users 0 Oct 23 12:34 testpipe
-rw-r--r-- 1 gp users 0 Oct 23 14:51 tmpfile
-rw-r--r-- 1 gp users 7 Oct 27 14:58 ttt
# Find newer files
$ find . -newer ttt -print
./t2t2
# Find files that are NOT newer
$ find . ! -newer ttt -print
.
./tmpfile
./testpipe
./logfile
./ttt
# You can eliminate the directories (all of them) from the output this way:
$ find . ! -newer ttt ! -type d -print
./tmpfile
./testpipe
./logfile
./ttt
# or this way
$ find . ! -newer ttt -type f -print
请注意,“较新”选项的不同形式(如anewer,cnewer)不会将其他文件与同一时间戳进行比较。您可能需要做一些测试才能看到哪个版本更适合您。
如果必须在文件名中使用时间戳,并且“find”的不同选项(包括“mmin”)不可接受,则必须检查每个文件名的嵌入时间戳。我建议检查这些命令:
# You have to escape the < of > signs you use.
$ expr "fabc" \< "cde"
0
$ expr "abc" \< "cde"
1
和此:
FILENAME="ABC_20141026101112.log" ; TIMESTAMP="`expr \"$FILENAME\" : \".*_20\([0-9]\{12\}\).*$\"`";echo $TIMESTAMP
所以“while read”循环,查看所有文件名并使用上面的“expr”比较来比较它们的时间戳应该可以胜任。理想情况下,我会尝试查看“查找”是否可以完成这项工作,因为阅读和检查每个文件会更慢。如果该目录中有数千个文件,那么我会尝试其他解决方案。如果您对更多选项感兴趣,请告诉我们。