O que “ls --dired-l” ou “ls -D -l” realmente imprime?

2

ls --dired -l imprime todos os dir e arquivos junto com algum número seguido por

//DIRED// ***66 69 122 131 ....***
//DIRED-OPTIONS// --quoting-style=literal

O que esses números em negrito significam?

--dired é uma opção do Emacs para trabalhar com diretórios, mas não entendo os números aqui.

    
por sameer pradhan 26.10.2015 / 08:51

2 respostas

5

A saída de ls -D deve ser analisada pelo modo dired do Emacs.

Do manual do GNU Coreutils

‘-D’
‘--dired’

With the long listing (-l) format, print an additional line after the main output:

//DIRED// beg1 end1 beg2 end2 …

The begn and endn are unsigned integers that record the byte position of the beginning and end of each file name in the output. This makes it easy for Emacs to find the names, even when they contain unusual characters such as space or newline, without fancy searching.

If directories are being listed recursively (-R), output a similar line with offsets for each subdirectory name:

//SUBDIRED// beg1 end1 …

Finally, output a line of the form:

//DIRED-OPTIONS// --quoting-style=word

where word is the quoting style (see Formatting the file names).

Here is an actual example:

$ mkdir -p a/sub/deeper a/sub2
$ touch a/f1 a/f2
$ touch a/sub/deeper/file
$ ls -gloRF --dired a
  a:
  total 8
  -rw-r--r-- 1    0 Jun 10 12:27 f1
  -rw-r--r-- 1    0 Jun 10 12:27 f2
  drwxr-xr-x 3 4096 Jun 10 12:27 sub/
  drwxr-xr-x 2 4096 Jun 10 12:27 sub2/

  a/sub:
  total 4
  drwxr-xr-x 2 4096 Jun 10 12:27 deeper/

  a/sub/deeper:
  total 0
  -rw-r--r-- 1 0 Jun 10 12:27 file

  a/sub2:
  total 0
//DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
//SUBDIRED// 2 3 167 172 228 240 290 296
//DIRED-OPTIONS// --quoting-style=literal

Note that the pairs of offsets on the ‘//DIRED//’ line above delimit these names: f1, f2, sub, sub2, deeper, file. The offsets on the ‘//SUBDIRED//’ line delimit the following directory names: a, a/sub, a/sub/deeper, a/sub2.

Here is an example of how to extract the fifth entry name, deeper, corresponding to the pair of offsets, 222 and 228:

$ ls -gloRF --dired a > out
$ dd bs=1 skip=222 count=6 < out 2>/dev/null; echo
deeper

Note that although the listing above includes a trailing slash for the deeper entry, the offsets select the name without the trailing slash. However, if you invoke ls with --dired along with an option like --escape (aka -b) and operate on a file whose name contains special characters, notice that the backslash is included:

$ touch 'a b'
$ ls -blog --dired 'a b'
  -rw-r--r-- 1 0 Jun 10 12:28 a\ b
//DIRED// 30 34
//DIRED-OPTIONS// --quoting-style=escape

If you use a quoting style that adds quote marks (e.g., --quoting-style=c), then the offsets include the quote marks. So beware that the user may select the quoting style via the environment variable QUOTING_STYLE. Hence, applications using --dired should either specify an explicit --quoting-style=literal option (aka -N or --literal) on the command line, or else be prepared to parse the escaped names.

Os números são as posições dos nomes dos arquivos na saída

The begn and endn are unsigned integers that record the byte position of the beginning and end of each file name in the output.

    
por 26.10.2015 / 10:11
1

-D, --dired
              gerar saída projetada para o modo dired do Emacs.

    
por 26.10.2015 / 09:16

Tags