Erro ao executar o script bash que move arquivos

0

Sou novo no bash script e quero criar um script bash que mova alguns arquivos antigos entre a origem e o destino, conforme os dias definidos no script.

Quando executo esse script, recebo um erro

find: os caminhos devem preceder a expressão: mv Uso: find [-H] [-L] [-P] [-Olevel] [-D ajuda | árvore | pesquisa | estatística | taxas | opt | exec] [caminho. ..] [expressão]

#!/bin/bash

echo "Enter Your Source Directory"
read soure

echo "Enter Your Destination Directory"
read destination 

echo "Enter Days"
read days




   find $soure -mtime +$days  mv $soure $destination {} \;

  echo "Files $days old moved from $soure to $destination"

O que está faltando ou errado ???? por favor me ajude a criar este script.

    
por Ketankumar Patel 20.12.2012 / 11:52

2 respostas

3

Tenho certeza de que você já os encontrou, mas os dois melhores lugares para começar a aprender o bash scripting são os Guia do Bash para iniciantes e o Guia avançado de script de script . Se você ainda não viu esses dois recursos, eu recomendo que você os marque, se você quiser fazer mais scripts de bash.

Parte removida referente ao controle de fluxo devido à edição em questão. O comando find precisa de -exec antes do comando, senão não saberá que mv é realmente um comando que você está tentando executar nos arquivos. Além disso, o {} no find é usado para se referir aos resultados do comando find, assim você não precisará do $source como parte do find. O comando find provavelmente se pareceria mais com:

find $source -mtime +$days -exec mv {} $destination \;

Se os resultados da busca incluírem arquivos / diretórios com espaços neles, talvez seja necessário percorrer os resultados (o que trará o do / done de volta para a mistura) para que você possa incluir os resultados da pesquisa em uma variável que pode então ser incluída entre aspas. Isso dará uma estrutura semelhante à seguinte:

for result in $(find $soure -mtime +$days)
do
    mv "${result}" $destination
done

Se você ainda estiver com problemas, sugiro que você inclua uma cópia da sua janela de terminal ao executar o script. Além disso, tente executar apenas o comando find sem as porções -exec mv... e substituindo as variáveis pelo que você normalmente preenche para elas durante a execução do script. Dessa forma, você pode ter uma ideia do que o comando find está correspondendo, para que você possa ter certeza de que ele corresponde aos arquivos desejados antes de fazer qualquer alteração no local dos arquivos.

    
por Matrix Mole 20.12.2012 / 12:18
1

Eu acho que você precisa ter uma declaração for antes do loop, para que isso funcione. Veja aqui , para mais informações sobre loops Bash.

    
por Neojames 20.12.2012 / 12:01