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 cp
comando 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" \;