我正在尝试创建一个可在多台服务器上运行的zip文件,以比较服务器的内容。由于许多原因,我要比较的最简单和最好的信息是目录列表的文本文件...但我需要没有修改日期,因为它们使得比较显示在这种情况下无关紧要的差异。
因此,如果我运行命令ls -la
来创建用于比较的文本输出,我会得到这样的结果:
drwxr-xr-x. 6 root root 4096 Mar 20 14:59 .
dr-xr-xr-x. 22 root root 4096 Feb 18 03:20 ..
drwxr-xr-x. 9 web ad 4096 Oct 30 14:35 apache-tomcat-6.0.18
drwxr-xr-x. 9 web ad 4096 Mar 24 03:00 apache-tomcat-6.0.36
lrwxrwxrwx. 1 root root 5 Oct 30 14:06 java -> java6
lrwxrwxrwx. 1 root root 16 Oct 30 14:05 java6 -> jdk/jdk1.6.0_37/
lrwxrwxrwx. 1 root root 16 Mar 20 14:59 java7 -> jdk/jdk1.7.0_17/
drwxr-xr-x. 4 root root 4096 Mar 20 15:02 jdk
lrwxrwxrwx. 1 root root 21 Nov 6 15:09 tomcat -> apache-tomcat-6.0.36/
我想要使用的是ls -la | cut -c 1-31
,但只需要一个列表(字符1-31),我真的想要在日期之后的数据。我对Unix很新,如果有人知道如何生成一个看起来像这样的列表,我很好奇:
drwxr-xr-x. 6 root root 4096 .
dr-xr-xr-x. 22 root root 4096 ..
drwxr-xr-x. 9 web ad 4096 apache-tomcat-6.0.18
drwxr-xr-x. 9 web ad 4096 apache-tomcat-6.0.36
lrwxrwxrwx. 1 root root 5 java -> java6
lrwxrwxrwx. 1 root root 16 java6 -> jdk/jdk1.6.0_37/
lrwxrwxrwx. 1 root root 16 java7 -> jdk/jdk1.7.0_17/
drwxr-xr-x. 4 root root 4096 jdk
lrwxrwxrwx. 1 root root 21 tomcat -> apache-tomcat-6.0.36/
由于
答案 0 :(得分:11)
我认为解决问题的最佳方法是使用awk。
ls -la | awk '{print $1, $2, $3, $4, $5, $9}'
所以你得到这样的输出:
drwxr-xr-x. 6 root root 4096 .
dr-xr-xr-x. 22 root root 4096 ..
drwx------+ 5 user staff 170 Desktop
drwx------+ 16 user staff 544 Documents
drwx------+ 6 user staff 204 Downloads
答案 1 :(得分:10)
发布备用解决方案,因为已接受的解决方案将在带有空格的文件名上失败。
在Linux和其他支持它的系统(不是Mac OS)上使用--time-style with null formatting
[root@preg junk]# ls -lah
total 12K
drwxr-xr-x 2 root root 4.0K Jan 6 16:12 .
drwxr-xr-x 4 root root 4.0K Jan 6 15:38 ..
-rw-r--r-- 1 root root 0 Jan 6 12:42 '$#%bad'
-rw-r--r-- 1 root root 2 Jan 6 16:12 'moar bad;'
-rw-r--r-- 1 root root 0 Jan 6 12:40 'quote"file'
-rw-r--r-- 1 root root 0 Jan 6 12:41 'single'\''quote'\''file'
[root@preg junk]# ls -lah --time-style='+' .
total 12K
drwxr-xr-x 2 root root 4.0K .
drwxr-xr-x 4 root root 4.0K ..
-rw-r--r-- 1 root root 0 '$#%bad'
-rw-r--r-- 1 root root 2 'moar bad;'
-rw-r--r-- 1 root root 0 'quote"file'
-rw-r--r-- 1 root root 0 'single'\''quote'\''file'
[root@preg junk]#
答案 2 :(得分:0)
cut
让您指定范围more easily than awk。
与tr -s ' '
结合使用,可修剪重复的空格。
$ ls -la /etc/ |tr -s ' ' |cut -d' ' -f1,2,3,4,5,9-
drwxr-xr-x 2 root root 4096 opt
lrwxrwxrwx 1 root root 21 os-release -> ../usr/lib/os-release
-rw-r--r-- 1 root root 6920 overlayroot.conf
drwxr-xr-x 4 root root 4096 vmware-tools
lrwxrwxrwx 1 root root 23 vtrgb -> /etc/alternatives/vtrgb
这很有用,例如当使用并行外壳并且要检查在不同时间创建的多个主机上的文件时。