Como posso combinar ou colar texto em um comando linux no terminal?

Sep 15 2020

Como posso combinar ou colar texto em um comando linux no terminal?

Eu gostaria de executar o seguinte comando do Linux ls -d $PWD/*que resulta: por exemplo.

/media/elias/2000_0101_004828_006.MP4
/media/elias/2000_0101_011328_007.MP4
/media/elias/2000_0101_013829_008.MP4
/media/elias/2000_0101_020328_009.MP4
/media/elias/2000_0101_021020_006.MP4
/media/elias/2000_0101_021620_006.MP4

Eu gostaria de executar um comando linux de forma que o resultado impresso produzido seja:

file '/media/elias/2000_0101_004828_006.MP4'
file '/media/elias/2000_0101_011328_007.MP4'
file '/media/elias/2000_0101_013829_008.MP4'
file '/media/elias/2000_0101_020328_009.MP4'
file '/media/elias/2000_0101_021020_006.MP4'
file '/media/elias/2000_0101_021620_006.MP4'

Isso é necessário para o Videofiles.txt que o comando ffmpeg concat requer para manipular arquivos de vídeo. Eu gostaria de executar uma única linha de comando para fazer todo esse trabalho automaticamente. Os resultados do comando linux serão salvos em um arquivo txt, por exemplo

   ls -d $PWD/* > videofiles.txt

isso é possível?

ps. meu comando ls lista os arquivos em ordem de data?

Respostas

6 steeldriver Sep 15 2020 at 13:59

A ordem não é determinada por ls, ela depende da ordem de classificação lexical LC_COLLATEaplicada ao shell *glob para sua localidade.

Dito isso, eu evitaria lstudo e faria algo como

printf "file '%s'\n" $PWD/* > videofiles.txt

(você pode alterar *para *.MP4se desejar corresponder .MP4apenas os arquivos).


Se você deseja que os arquivos sejam ordenados por hora de modificação (também conhecido como "mtime") como faria com ls -t, então isso não é possível nativamente no bash, mas é no zsh usando qualificadores glob ex.

printf "file '%s'\n" $PWD/*.MP4(om)

para classificar por mtime crescente (como ls -t) ou

printf "file '%s'\n" $PWD/*.MP4(Om)

para classificar por mtime decrescente (como ls -tr).