Tentando criar um script de shell para mover todos os arquivos com um determinado ano em seu nome para um diretório baseado em ano

3

Aqui está o bloco de código que tenho até agora. Não importa o que eu faça com o comando find, não consigo fazê-lo funcionar como quero. Tentando mover todos os arquivos com esses nomes de longos anos para seus próprios diretórios nomeados.

for i in 2008 2009 2010 2011
do
mkdir /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i
find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;
done
    
por GentilmanMyles 30.07.2015 / 03:13

1 resposta

0

Substituir:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Com:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -maxdepth 1 -iname "*$i*" -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

O problema é que $i não se expande entre aspas simples. Então, use "*$i*" no lugar de '*$i*' .

Além disso, find prefere especificar opções, como -maxdepth , antes dos testes, como -iname . No código acima, o pedido foi alterado de acordo.

Por fim, em dois lugares, você usa ...Test/$i sem aspas. Isso funciona aqui apenas porque $i não contém espaços em branco. Se assim fosse, deveria estar entre aspas duplas.

    
por 30.07.2015 / 03:44