find retorna duas entradas de item de linha para o mesmo arquivo

0

O comando:

find . ! -name '*153902*.json' -exec ls -nls {} + | sort -k 10

retorna:

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 ./Flights20180506-151026_KSEA_300.json
12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

Esse trecho da resposta mostra que os dois primeiros itens de linha parecem representar o mesmo arquivo: a diferença é um './' prefixado ao nome do arquivo. O que esse primeiro item de linha representa e por que o terceiro item de linha não tem um ./?

myname@Metropolitan:~/FlightAwareXML3/Thanksgiving18$ find . ! -name '*153902*.json' -exec ls -nlst {} \; | grep 153902_KATL_0
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

PERGUNTAS

  1. Quais são as palavras-chave exclusivas do Google para saber mais sobre a sintaxe ./?

  2. É possível (se sim como) eliminar a resposta do item de primeira linha com o ./

por gatorback 07.05.2018 / 05:00

2 respostas

6

Aqui está o processo:

find . ! -name '*153902*.json'

retornará:

.
./Flights20180506-151026_KSEA_300.json

, em seguida, o exec é executado:

ls -nls . ./Flights20180506-151026_KSEA_300.json

que fornece o conteúdo de . :

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json

e ./Flights20180506-151026_KSEA_300.json em si.

O ./ que você vê na saída é o resultado da concatenação do caminho . com o nome do arquivo que corresponde à sua condição. O comportamento é descrito no POSIX encontrar documento :

Each path operand shall be evaluated unaltered as it was provided, including all trailing characters; all pathnames for other files encountered in the hierarchy shall consist of the concatenation of the current path operand, a if the current path operand did not end in one, and the filename relative to the path operand

    
por 07.05.2018 / 05:09
0

Ao procurar por arquivos regulares com find , use -type f :

find . -type f ! -name '*153902*.json'

Dessa forma, você evita corresponder nomes de diretórios, em particular . neste caso.

    
por 07.05.2018 / 18:18

Tags