Copiar comando con argumentos de línea de comando

Copiar comando con argumentos de línea de comando

Estoy escribiendo un script simple que requerirá una palabra clave. Luego, buscará archivos en el directorio que contengan esa palabra clave y los copiará a otro directorio (nombre del directorio = palabra clave).

La palabra clave se pasa como argumento de línea de comando. Aquí está mi guión:

#!/bin/bash
# start

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

Parece que tengo un error con el cpcomando que dice:

missing destination file operand

¿Cómo puedo corregir este error?

¡Gracias!

Respuesta1

La solución en la respuesta de Mike es mayoritariamente correcta, sin embargo, la cambiaría ligeramente para crear el directorio solo si grep encuentra algo, evitando así los directorios vacíos.

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

Respuesta2

Esta es la forma correcta:

#!/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

Respuesta3

Podrías intentar usar buscar:

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

información relacionada