如何使用print命令获取更清晰的文件信息?

时间:2013-03-20 21:06:25

标签: bash unix

我有这个命令来转储所有java和xml文件:

find . -name '*.*' -print -ls

我得到以下输出:

./auth-jaas/pom.xml
562949954141667    2 ----------   1 John ????????     1282 Feb 14  2011 ./auth-jaas/pom.xml

有没有办法让这样小的东西:

1282 Feb 14  2011 ./auth-jaas/pom.xml

我只对文件大小和时间戳感兴趣。

4 个答案:

答案 0 :(得分:4)

我认为你所追求的是:

find . -name '*.*' -exec stat -f "%10z %Sm %N" {} +

我在其中一个目录中将此作为输出的一部分:

   534 Mar  2 20:17:16 2013 ./so.6964747
   835 Mar  2 20:17:16 2013 ./so.6965001
 25048 Jun 25 21:29:46 2012 ./so.8854855.sql
  7710 Feb 13 07:17:01 2013 ./sortAtt.c
  1565 Sep  4 19:15:30 2010 ./strandsort.c
  7224 Sep 22 13:42:17 2012 ./streplace.c
  3033 Jan 28 23:16:46 2013 ./substr.c
   139 Mar 20 12:48:24 2013 ./sum.sh
  6833 Sep 21 07:57:53 2012 ./timezeromoves.c
   614 Feb 21 09:23:00 2013 ./travAsm.c
   347 Feb 21 09:23:00 2013 ./traverse.c
  1277 Jul 26 09:30:12 2012 ./uint128.c
   793 Aug 19 00:47:48 2012 ./unwrap.c
  1906 Jul 28 08:41:22 2012 ./xxx.sql
  1904 Sep 22 21:30:09 2011 ./yyy.sql

阅读这些选项可能会告诉您如何从“修改时间的字符串格式”(%Sm)中删除时间。

仅供记录,这是在Mac OS X 10.7.5上使用/usr/bin/stat,而不是GNU stat。你需要仔细检查那里有什么。

find . -name '*.*' -exec /usr/gnu/bin/stat --format "%s   %y   %N"

输出的相同部分是:

534   2013-03-02 20:17:16.000000000 -0800   ./so.6964747
835   2013-03-02 20:17:16.000000000 -0800   ./so.6965001
25048   2012-06-25 21:29:46.000000000 -0700   ./so.8854855.sql
7710   2013-02-13 07:17:01.000000000 -0800   ./sortAtt.c
1565   2010-09-04 19:15:30.000000000 -0700   ./strandsort.c
7224   2012-09-22 13:42:17.000000000 -0700   ./streplace.c
3033   2013-01-28 23:16:46.000000000 -0800   ./substr.c
139   2013-03-20 12:48:24.000000000 -0700   ./sum.sh
6833   2012-09-21 07:57:53.000000000 -0700   ./timezeromoves.c
614   2013-02-21 09:23:00.000000000 -0800   ./travAsm.c
347   2013-02-21 09:23:00.000000000 -0800   ./traverse.c
1277   2012-07-26 09:30:12.000000000 -0700   ./uint128.c
793   2012-08-19 00:47:48.000000000 -0700   ./unwrap.c
1906   2012-07-28 08:41:22.000000000 -0700   ./xxx.sql
1904   2011-09-22 21:30:09.000000000 -0700   ./yyy.sql

答案 1 :(得分:3)

如果-printf命令中有find版Linux,请使用%a表示访问时间,%t表示修改时间(以及更具体的大写变体)格式化)和%s的文件大小(以字节为单位)。

或者,将输出从-ls传递到cut

答案 2 :(得分:2)

改为使用du

$ du --time file
4   2013-03-20 19:49    file

使用find

$ find . -name 'file' -exec du --time {} +

答案 3 :(得分:0)

通常我会说剪切,但不知道它们是制表符还是空格分隔符:

find . -name '*.*' -print -ls |awk '{$0=substr($0,index($0,FS)+4);printf $0}'