Shell Unix:文件格式

Shell Unix:文件格式,shell,unix,solaris-10,Shell,Unix,Solaris 10,acdbaqa@qaca010z:/tmp/joelj>ls-lrt hl.sh -RWXRWX 1 acdbaqa acdba 22107月13日20:07hl.sh 如何将任何文件的日期格式转换为YYYYMMDD:HHSS在您的示例中,您似乎认为2210是日期的一部分(不是,是文件大小),而您所需的格式省略了分钟。如果两者都是无意的,并且您正在使用GNU ls,则: 在您的示例中,哪一个或多或少会给出这样的结果: -rwxrwxrwx 1 acdbaqa acdba 221

acdbaqa@qaca010z:/tmp/joelj>ls-lrt hl.sh -RWXRWX 1 acdbaqa acdba 22107月13日20:07hl.sh


如何将任何文件的日期格式转换为YYYYMMDD:HHSS

在您的示例中,您似乎认为2210是日期的一部分(不是,是文件大小),而您所需的格式省略了分钟。如果两者都是无意的,并且您正在使用GNU ls,则:

在您的示例中,哪一个或多或少会给出这样的结果:

-rwxrwxrwx   1 acdbaqa  acdba       2210 20170713:200700 hl.sh

如果您所需要的是文件的修改时间,而不是<代码> ls >,请考虑使用<代码> STAT命令:

stat -f %Sm -t %Y%m%d:%H%M%S hl.sh
这是日期/时间格式的长格式;它可以缩写为
%F:%T

如果没有
stat
,可以使用
perl

perl -MPOSIX -le 'print(strftime "%Y%m%d:%H%M%S", localtime((stat "hl.sh")[9]))'
您可以将文件名传入代码外部,以避免引用/插入问题:

perl -MPOSIX -le 'print(strftime "%Y%m%d:%H%M%S", localtime((stat $ARGV[0])[9]))' hl.sh

我倾向于使用stat命令,但在Ubuntu上我无法正确使用它。 这是我的答案。它使用perl来进行一些字符串操作,因此它可能被认为是一种变通方法

ls -lrt somefiles |perl -MDate::Manip -pe 's/^([-\w]+ \d+ \w+ \w+ \d+ )(\w+ +\d+ +[:\d]+)/$1.UnixDate(ParseDate($2),"%Y%m%d:%H%M")/e'
这将识别格式为%month%day%hour:%minute的日期字符串,并将其转换为所需格式

更新:现在还可以使用第二种日期格式,
ls
用于一年以上的文件(%month%day%year)

文件的输出:

-rwxrwxrwx 1 acdbaqa acdba 2210 20170713:2007 hl.sh

它的失败acdbaqa@qaca010z:/tmp/joelj>ls-lrt--time style=“+%Y%m%d:%H%m%S”ls:非法选项--time style=+%Y%m%d:%H%m%S用法:ls-1raadcxmnlhogturtuvvcpfbqisfhlee@[文件]acdbaqa@qaca010z:/tmp/joelj>ls-lrt hl.sh--time style=“+%Y%m%d:%H%m%S”--时间样式=+%Y%m%d:%H%m%S:没有这样的文件或目录-rwxrwx 1 acdbaqa acdba 2210 Jul 13 20:07 hl.shacdbaqa@qaca010z:/tmp/joelj>uname-a SunOS qaca010z 5.10通用_150400-48 sun4u sparc SUNW,sparc-Enterpriseacdbaqa@qaca010z:/tmp/joelj>ls-lrt--time style=“+%Y%m%d:%H%m%S”ls:非法选项--时间样式=+%Y%m%d:%H%m%S用法:ls-1raadcxmnlhogturtuvvcpfbqisfhlee@[文件]acdbaqa@qaca010z:/tmp/joelj>ls-lrt hl.sh--time style=“+%Y%m%d:%H%m%S”--时间样式=+%Y%m%d:%H%m%S:没有这样的文件或目录-rwxrwx 1 acdbaqa acdba 2210 Jul 13 20:07 hl.shacdbaqa@qaca010z:/tmp/joelj>uname-a SunOS qaca010z 5.10 Generic_150400-48 sun4u sparc SUNW,sparc enterprise不要试图将输出放在注释中。但您可能没有GNU ls。请参阅我的答案,以了解更具可移植性的选项。2005年推出的Sunos 5.10(也称Solaris 10)确实没有使用GNU用户区,因此我的解决方案无法开箱即用。我投票结束这个问题,因为它不是关于编程,而是关于如何使用某个程序(
ls
)。它更适合unix.stackexchange.com。看起来OP需要一些脚本建议,因为此
ls
缺少合适的选项@切普纳。不要这样做。如果要在shell脚本中设置文件的格式化日期,请改用
stat
。阅读
man stat
以查看您平台的使用说明。我正在尝试在shell脚本(或编程,无论您如何称呼它)的一部分中使用它,否则我不会将它带到这里。。。我得到的这些评论和答案在Linux机器上运行良好,但在Unix(SunOS主机名5.10 Generic_150400-48 sun4u sparc SUNW,sparc Enterprise)上,stat在SunOS中不起作用。SunOS qaca010z 5.10通用_150400-48 sun4u sparc SUNW,sparc Enterprise无法在@INC中找到日期/Manip.pm(@INC包含:/app/ac/local/lib/perl5/app/ac/lib/perl5/app/localapps/perl/lib/lib/ac/local/lib/usr/perl/perl5/5.8.4/lib/sun4-solaris-64int/usr/perl5/5.8.4/lib/usr/perl5/perl5/site\u perl/5.8.4/5.4/usr/sun4/perl-solaris-64int/5/5.8.4/usr/usr/perl5.4/perl-64int/4/usr/perl.4/4/perl.4/4/perl.4/4/perl.4/perl.4/4/perlr/perl5/vendor_perl/5.8.4/usr/perl5/vendor_perl。)。开始失败--编译中止。您需要安装此软件包。运行
cpan Date::Manip
-rwxrwxrwx 1 acdbaqa acdba 2210 20170713:2007 hl.sh