Copiar comando com argumentos de linha de comando

Copiar comando com argumentos de linha de comando

Estou escrevendo um script simples que usará uma palavra-chave. Em seguida, ele irá procurar os arquivos no diretório que contém aquela palavra-chave e copiá-los para outro diretório (nome do diretório = palavra-chave).

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

#!/bin/bash
# start

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

Parece que tenho um erro com o cpcomando dizendo:

missing destination file operand

Como posso corrigir esse erro?

Obrigado!

Responder1

A solução na resposta de Mike está quase 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

Responder2

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

Responder3

Você poderia tentar usar find :

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

informação relacionada