script para trocar dois arquivos

6

uma coisa que sempre me deixou louco é a necessidade de fazer

 mv file1 tmp
 mv file2 file1
 mv tmp file2

para trocar 2 nomes de arquivos.

o que vocês usam para trocar 2 arquivos? Existe algum script padrão para trocar?  algo como sw file1 file2 seria bom

    
por brillout 21.10.2011 / 00:00

4 respostas

11

A sugestão seria adicionar a bash uma função que irá trocar dois arquivos:

nano .bashrc

cole na parte inferior do arquivo:

function swap()         
{
  if [ $# -ne 2 ]; then
    echo "Usage: swap file1 file2"
  else
    local TMPFILE=$(mktemp)
    mv "$1" $TMPFILE
    mv "$2" "$1"
    mv $TMPFILE "$2"
  fi
}

faça logout / login ou execute:

source .bashrc

Para trocar dois arquivos, execute:

swap x y

onde x e y são seus nomes de arquivos

source

    
por fossfreedom 21.10.2011 / 00:32
2

Sugiro ir com um script bash em vez de jogar com o bash.conf.

Se você está entrando em sistemas Unix, você precisará aprender scripts de shell em algum momento.

    
por Brandon Weaver 21.10.2011 / 02:02
1

Este script faz duas coisas:

  • verifica se você não usou por engano um número errado de argumentos
  • verifica se ambos os argumentos são arquivos (não digite em erro e use um diretório ou algo assim).

Se falhar qualquer uma dessas duas verificações, ele irá dizer-lhe como executar o script, senão você terá seus arquivos trocados.

#! /bin/sh

if [ ! $# = 2 -o ! -f $1 -o ! -f $2 ]
then
    echo "Usage: 'basename $0' file1 file2."
    exit
fi

mv $1 cop_$1
mv $2 $1
mv cop_$1 $2

Salve em sua casa, use chmod +x <scriptname>.sh para torná-lo executável, mova-o para seu /usr/bin/ com o comando sudo cp <scriptname>.sh /usr/bin/ .

Agora você pode usar <nameofthescrip> file1 file2 para trocar arquivos.

    
por Bruno Pereira 21.10.2011 / 00:22
1

Concordo com o Bruno, o script de shell é mais a norma para adicionar funcionalidade de tipo de comando. Eu ofereço sugestões adicionais:

1- para o uso, não inclua o período no final da mensagem. Você está tentando mostrar a sintaxe e a mensagem "Uso: trocar arquivo1 arquivo2." é possivelmente enganosa, não é uma sentença e deve apenas dizer: "Uso: trocar arquivo1 arquivo2"

2- Colocar o arquivo em / use / bin faz dele um comando do sistema. Enquanto sua instalação pessoal do Ubuntu pode tolerar isso, quando você decidiu reinstalar do zero, você captura seu diretório pessoal, não o / usr / bin. Eu sugiro que você crie $ HOME / bin, adicione isso ao seu caminho de busca, e coloque todos os seus scripts nesse diretório. Seu diretório bin é o seu tesouro pessoal de comandos adicionais.

3- Se você colocar a função em bashrc, então, ela estará disponível apenas em um shell bash, se você quiser que a troca esteja disponível independentemente do shell, então um script shell em um diretório bin é mais universal e padrão.

4- No script, sugiro que a saída após a saída Usage seja alterada para "exit 1" e depois da última linha (third mv command) adicione "exit 0". O código de saída indica sucesso ou falha. Se você escrever outros scripts que usem swap, eles poderão verificar o código de saída para ver se houve sucesso ou falha.

5- Em vez de cop_ $ 1, que assume que o arquivo cop_ não existe, sugiro a função mktemp, usando a opção --tmpdir que cria o arquivo temporário no diretório atual. Isso não garante nomes de arquivos conflitantes.

Colocando isso tudo junto, ofereço o seguinte:

#!/bin/sh 
if [ ! $# = 2 ] ; then
    echo "Usage: 'basename $0' file1 file2"
    echo "Two file names are required."
    exit 1
fi
if [ ! -f $1 -o ! -f $2 ] ; then
    echo "Usage: 'basename $0' file1 file2"
    echo "Only file names are allowed."
    exit 1
fi

TEMP='mktemp --tmpdir=.'

mv $1 ${TEMP}
mv $2 $1
mv ${TEMP} $2
exit 0

Agora coloque isso no diretório bin no seu diretório home. Certifique-se de que sua variável PATH apanha este diretório base echo $PATH . Se não, o PATH é definido em seus recursos de inicialização do shell (.bashrc ou .cshrc ou ???).

cd
mkdir bin
nano swap
< now paste the above script into the file, save, and exit>
chmod 755 swap
nano $HOME/.bashrc
< now add the following 2 lines at the end of the file, save, and exit>
# user specific pathing
PATH="$HOME/bin:$PATH"

Agora, você inicia um novo shell bash ou reprocessa o arquivo .bashrc:

source .bashrc

Novo login ou shells devem ser automáticos.

É isso. Teste com apenas um comando de troca e você deverá ver o texto de uso.

    
por Hey Gary 08.04.2012 / 21:58