São '-L1' e '-n 1' iguais para 'xargs'?

5

Em Pesquise e remova arquivos com segurança

locate  -i nohup.out | xargs -d '\n' -L1 -p rm

Cada linha na saída de locate é tratada como um argumento por xargs, então -L1 e -n 1 são iguais?

Obrigado.

    
por Tim 06.06.2018 / 23:08

3 respostas

3

Do manual:

-L max-lines
Use at most max-lines nonblank input lines per command line. Trailing blanks cause an input line to be logically continued on the next input line. Implies -x.

-n max-args
Use at most max-args arguments per command line. Fewer than max-args arguments will be used if the size (see the -s option) is exceeded, unless the -x option is given, in which case xargs will exit.

-d delim
Input items are terminated by the specified character. [...]

Com base nisso e no meu entendimento, no seu caso, -L1 e -n1 são equivalentes pelo argumento 1 passado e o delimitador foi alterado de espaço em branco para \n (newline) pelo argumento -d

Por exemplo, sem o argumento -d se você tivesse um espaço em branco na saída de localização, essa linha seria dividida em dois argumentos e, portanto, dois usos diferentes de rm com -n1 , enquanto ainda seria ser tratado como um argumento e apenas um comando com -L1

    
por 06.06.2018 / 23:47
2

Parece que a diferença, baseada na leitura do manual, é que -L filtra linhas não vazias , enquanto -n não. Presumindo que locate nunca produzirá uma linha contendo apenas espaços em branco, eles devem ser funcionalmente idênticos neste caso de uso.

    
por 06.06.2018 / 23:36
1

A opção -L é uma extensão XSI e não precisa estar presente em sistemas embarcados.

A opção -n faz parte do padrão básico e sempre funciona.

Veja o padrão como referência: link

Observe que algumas implementações também podem mudar o comportamento de linhas que terminam em espaços, enquanto outras podem concatenar uma linha que termina no espaço, independentemente de a opção -L ter sido especificada.

    
por 07.06.2018 / 11:44

Tags