Копировать команду с аргументами командной строки

Копировать команду с аргументами командной строки

Я пишу простой скрипт, который возьмет ключевое слово. Затем он будет искать файлы в каталоге, содержащие это ключевое слово, и копировать их в другой каталог (имя каталога = ключевое слово).

Ключевое слово передается как аргумент командной строки. Вот мой скрипт:

#!/bin/bash
# start

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

Кажется, у меня возникла ошибка в cpкоманде:

missing destination file operand

Как исправить эту ошибку?

Спасибо!

решение1

Решение в ответе Майка в основном верное, однако я бы немного изменил его, чтобы создать каталог только в том случае, если grep что-то найдет, тем самым предотвращая появление пустых каталогов.

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

решение2

Вот правильный способ:

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

решение3

Вы можете попробовать использовать find:

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

Связанный контент