Adicionando prefixos / sufixos a nomes de arquivos sem digitar tudo de novo?

3

Gostaria de fazer algo como o seguinte

$ tmp=name*
$ mv $tmp new_$tmp
$ ls new_*
$ new_name-with-stuff-i-dont-want-to-type name-with-stuff-i-dont-want-to-type

Definir a variável de ambiente parece funcionar

$ $tmp
$ name-with-stuff-i-dont-want-to-type

Mas não quando eu faço o mv

$ mv $tmp new_$tmp
$ ls new_*
$ new_name*

Pergunta: Existe uma maneira fácil e inteligente de fazer isso para economizar alguma digitação?

    
por ryanjdillon 29.10.2013 / 18:53

3 respostas

5

Eu sempre amo expandir o bash para isso:

ls
name-with-stuff-i-dont-want-to-type

mv name-with-stuff-i-dont-want-to-type{,_old}

ls
name-with-stuff-i-dont-want-to-type_old

Isso é equivalente a:

mv name-with-stuff-i-dont-want-to-type name-with-stuff-i-dont-want-to-type_old

Para prefixar:

ls
name-with-stuff-i-dont-want-to-type

mv {,new_}name-with-stuff-i-dont-want-to-type

ls
new_name-with-stuff-i-dont-want-to-type

Para facilitar a renomeação de arquivos:

ls
fileFOOname

mv file{FOO,BAR}name

ls
fileBARname
    
por 29.10.2013 / 19:07
2

Com zsh , normalmente é isso que você usa zmv para:

autoload zmv # in ~/.zshrc
zmv 'name*' 'tmp_$f'
    
por 29.10.2013 / 22:58
0

Se houver mais de um arquivo correspondente a name* , então $tmp conterá todos esses nomes separados por espaços em branco. Trate $tmp como uma matriz e opere em cada elemento:

for file in $tmp; do 
    mv "$file" "new_$file"
done

Use aspas duplas para evitar a divisão de nomes que contenham espaços em branco em vários nomes.

    
por 29.10.2013 / 18:58