Copie arquivos de um diretório se o nome estiver presente em um arquivo de texto

1
#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
    cd /home/Sud/Minimal\ Packages/All/
    if [ -d $line ]
    then
        cp $line*.rpm /home/Sud/NewFolder/rpms/
    else
        echo $line>>/home/Sud/NewFolder/notfound.txt
    fi
done < "$1"

Estou tentando executar o código acima para

  1. Ler um arquivo de texto linha por linha
  2. Pesquise uma pasta se houver um diretório com esse nome
    • a) se sim; copiar o conteúdo desse diretório para outro diretório
    • b) se não, copie o nome do diretório para outro arquivo de texto.

Sempre que executo o script, ele copia todos os nomes para notfound.txt , mesmo que estejam presentes na pasta que estou procurando.

Onde estou indo errado?

    
por sudhansh_ 29.03.2016 / 12:13

2 respostas

0
if cp "$line"*.rpm destination/ ; then
    echo $line "successful!"
else
    echo $line "not found!"
    echo "$line">> /home/Sud/notfound.txt
fi

Isso funcionou para mim.

    
por 30.03.2016 / 07:27
0

Poderia, por favor, tentar colocar todo o uso de $line entre aspas duplas para lidar corretamente com espaços em branco?

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd /home/Sud/Minimal\ Packages/All/
if [ -d "$line" ]
then
    cp "$line*.rpm" /home/Sud/NewFolder/rpms/
else
    echo "$line" >> /home/Sud/NewFolder/notfound.txt
fi
done < "$1"
    
por 29.03.2016 / 13:04