Copiar comando com argumentos de linha de comando

1

Estou escrevendo um script simples que terá uma palavra-chave. Em seguida, ele procurará arquivos no diretório que contêm essa palavra-chave e os copia para outro diretório (nome do diretório = palavra-chave).

A palavra-chave é passada como um argumento de linha de comando. Aqui está meu script:

#!/bin/bash
# start

mkdir $1
cp 'grep -Ril \"$1\"' $1

Parece que tenho um erro com o comando cp dizendo:

missing destination file operand

Como posso corrigir esse erro?

Obrigado!

    
por Arjun 07.06.2016 / 17:40

3 respostas

4

A solução na resposta do Mike é na maior parte correta, no entanto eu mudaria um pouco para criar o diretório somente se o grep encontrar algo evitando assim os diretórios vazios

#!/bin/bash
filenames=$(grep -Ril "$1")
[ $? -eq 0 ] && mkdir "$1"
for file in $filenames; do
    cp "$file" "$1"
done
    
por 07.06.2016 / 18:52
2

Esta é a maneira correta:

#!/bin/bash
mkdir "$1"
filenames=$(grep -Ril "$1")
if [ $? -eq 0 ] ; then
    echo "$filenames" | while IFS= read -r line ; do
        cp "$line" "$1"
    done
fi
    
por 07.06.2016 / 18:26
1

Você pode tentar usar o find:

mkdir "$1"
find . -type f -name "*$1*" -exec cp {} path/to/"$1" \;
    
por 07.06.2016 / 17:56