如何在 Unix 中列出不带修改日期的文件

问题描述 投票:0回答:3

我正在尝试创建一个将在多个服务器上运行的 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/

谢谢

unix ls
3个回答
22
投票

发布替代解决方案,因为接受的解决方案将因文件名带有空格而失败。

在 Linux 和其他支持它的系统(非 macOS)上使用 --time-style 和 null 格式

$ ls -lh
total 12K
-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'

$ ls -lh  --time-style='+'
total 12K
-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'

15
投票

我认为解决你的问题的最佳方法是使用 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
投票

cut
让您指定范围,比 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

这很有用,例如当使用并行 shell 并且您想要检查多个主机上不同时间创建的文件时。

© www.soinside.com 2019 - 2024. All rights reserved.