A partir do exemplo do OP, a renomeação e a mudança parecem bastante consistentes, por exemplo, filename.jpg
parece sempre prefixado com o mesmo caminho mais um "t" se tornando thumb/tfilename.jpg
. Se este for o caso, então é possível fazer algo mais simples.
Se todos forem destinados ao diretório "thumb /".
Tenha os arquivos de teste abc.jpg, xyz.jpg no diretório atual.
Aqui está uma lista de arquivos de amostra
$ cat testfile
abc.jpg
xyz.jpg
Teste
É útil testar a versão do comando com um eco para ver o que o código fará:
$ while read my_file; do
echo cp -a "$my_file" "thumb/t$my_file"
done < testfile
Resultado do teste:
cp -a abc.jpg thumb/tabc.jpg
cp -a xyz.jpg thumb/txyz.jpg
-
while read my_file; do ... done
sintaxe processará stdin, linha por linha -
< testfile
usa<
para redirecionartestfile
para stdin, então a instrução while lê -
my_file
é uma variável que fizemos para conter a entrada, que, como vemos no corpo do código, pode ser referenciada com$my_file
- use aspas para evitar possíveis problemas se os nomes de arquivos tiverem espaços ou outros caracteres estranhos que possam quebrar os espaços que o comando
cp
usa para reconhecer argumentos
Final
Se estiver satisfeito com os resultados do eco de teste, podemos remover o eco para realmente executar o comando:
$ while read my_file; do
cp -a "$my_file" "thumb/t$my_file"
done < testfile
Quando você verificar o diretório thumb/
, verá os dois arquivos de teste copiados lá.
Final, com Feedback
Por padrão, cp
não fornece feedback, a menos que haja erros. Então, se você está copiando centenas ou milhares de arquivos, pode parecer que nada está acontecendo. Para ver o feedback, use a opção detalhada -v
:
$ while read my_file; do
cp -av "$my_file" "thumb/t$my_file"
done < testfile
Resultado:
'abc.jpg' -> 'thumb/tabc.jpg'
'xyz.jpg' -> 'thumb/txyz.jpg'