Passando informações completas sobre o caminho do arquivo para xargs

0

Eu tenho um script bash no qual estou tentando listar arquivos jpg em ordem de data de modificação, seguido por renomeá-los em ordem numérica (0.jpg, 1.jpg, 2.jpg, etc ...) usando xargs. Isso precisa ocorrer em vários diretórios. Aqui está o código:

ls -1rt "/media/171/" | xargs rename  's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/193/" | xargs rename  's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/211/" | xargs rename  's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'

O problema é que, quando executo o script, os arquivos são listados ok, mas xargs gera um erro que não consegue encontrar o arquivo especificado. Só funciona quando executo o comando dentro de cada diretório. Eu percebo que você não pode "cd /" dentro de um script bash, eo problema parece ser que xargs não está sendo passado o caminho completo do arquivo. Como posso passar o caminho completo do arquivo para o comando xargs?

    
por Liam 15.09.2018 / 17:09

1 resposta

0

O único erro sobre arquivos que xargs pode lançar é que não encontrou o executável, rename neste caso. Todo o resto sobre arquivos tem que vir do programa que xargs roda.

Um script de shell pode usar o comando cd . Mas, neste caso, o script não tem como saber qual diretório ele deve usar.

Você pode querer tentar

( cd "/media/171/" && ls -1rt | xargs rename  's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e' )
    
por 15.09.2018 / 17:28

Tags