コマンドライン引数付きのコマンドをコピーする

コマンドライン引数付きのコマンドをコピーする

キーワードを受け取る簡単なスクリプトを書いています。次に、そのキーワードを含むディレクトリ内のファイルを検索し、それらを別のディレクトリ (ディレクトリ名 = キーワード) にコピーします。

キーワードはコマンドライン引数として渡されます。これが私のスクリプトです:

#!/bin/bash
# start

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

次のようなコマンドでエラーが発生しているようですcp:

missing destination file operand

このエラーを修正するにはどうすればいいでしょうか?

ありがとう!

答え1

Mikeの回答の解決策はほぼ正しいですが、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" \;

関連情報