Existem várias maneiras de abordar isso. Um poderia ser através da função definida no arquivo ~/.bashrc
.
pmv(){
mv ""/"" ""/""
}
A função pmv
, então, levaria 3 argumentos. Caminho para o diretório, arquivo de origem e arquivo de destino. Por exemplo:
$ ls testdir
self_test.sh* test.wxg
$ pmv ./testdir test.wxg test2.wxg
$ ls testdir
self_test.sh* test2.wx
Observe que nessa função nós nos associamos ao caminho do diretório e ao caminho do arquivo com barra, assim, quando o caminho para o diretório é dado como argumento da linha de comando, não deve haver uma barra final no final. Podemos, no entanto, melhorar a definição da função usando a expansão de parâmetro do bash , que nos permitirá usar /path/to/dir
ou /path/to/dir/
:
pmv(){
mv "${1%/}"/"" "${1%/}"/""
}
Em uma questão relacionada (que eu suspeito que tenha a mesma solução). Digamos que eu queira mover um arquivo someverybigfilename.png para somereallybigfilename.png. Existe uma maneira de conseguir isso sem redigitar o nome?
Efetivamente, não, não há como fazer isso com mv
sozinho. Até mesmo as soluções steeldriver e mine para a primeira parte da sua pergunta fazem uso dos recursos de bash
, não de mv
. Manipulações de renomeação mais avançadas, como no seu caso inserir texto em filename, devem ser feitas com prename
, onde você usa expressões regulares perl para renomear arquivos dinamicamente.
$ touch someverybigfilename.png
$ prename 's/very/really/' someverybigfilename.png
$ ls somereallybigfilename.png
somereallybigfilename.png