Renomear em movimento com espaço reservado / curinga

0

Digamos que eu tenha os seguintes arquivos

/home/user/test1.java
/home/user/test2.java
/home/user/test3.java
/home/user/test1.java.orig
/home/user/test2.java.orig
/home/user/test3.java.orig

Eu quero sobrescrever os arquivos sem a extensão .orig com esses arquivos, por exemplo, /home/user/test1.java.orig -> /home/user/test1.java e assim por diante.

Existe algum comando como o seguinte?

mv /home/user/*.orig /home/user/*

em que posso usar o marcador de posição da origem na definição de destino e onde posso especificar que quero sobrescrevê-lo?

    
por Markus Weninger 18.02.2016 / 10:02

2 respostas

2
for file in /home/usr/* ; do mv "$file" "${file//.orig/}" ; done

Deve fazer o truque para você, ele percorre todos os arquivos (e diretórios) em / home / user usando a expansão glob e substitui qualquer instância da string .orig por nada, então exclui-a.

Ele deve ficar bom, desde que você não tenha subdiretórios com .orig em seu nome. Isto lhe dará algumas mensagens de erro que não são críticas, mas podem ser irritantes. Para trabalhar somente nos arquivos que têm uma extensão .orig , você pode inserir uma verificação condicional se o arquivo tiver a extensão indesejada:

for file in /home/user/* ; do [[ $file = *.orig ]] && mv "$file" "${file//.orig/}" ; done
    
por Arronical 18.02.2016 / 10:08
1
for file in $(find /home/user/* -name "*.orig") ; do mv $file ${file//.orig/} ; done

Isso moverá somente os arquivos com a extensão fornecida e também será executado recursivamente por meio de subdiretórios.

Se a recursão deve ser desativada, on pode adicionar -maxdepth 1 ao comando find.

    
por Markus Weninger 18.02.2016 / 10:24