12

サーバーの内容を比較するために複数のサーバーで実行される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つのリスト(文字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/

ありがとう

4

3 に答える 3

19

受け入れられたソリューションはスペースを含むファイル名で失敗するため、代替ソリューションを投稿します。

Linuxおよびそれをサポートする他のシステム(Mac OSではない)では、null形式の--time-styleを使用します

[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]# 
于 2017-01-06T21:08:01.523 に答える
14

私はあなたの問題に対する最善の解決策は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
于 2013-03-25T20:12:48.290 に答える
-1

cutawkよりも簡単に範囲を指定しましょう。繰り返し使用する空白を削除
するには、と組み合わせて使用​​します。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

これは、たとえば、並列シェルを使用していて、異なる時間に作成された複数のホスト上のファイルをチェックする場合に役立ちます。

于 2020-05-28T13:08:36.587 に答える